天天看點

混淆後應用閃退

問題:本地調試運作沒有問題,打包後運作閃退。

如果你也遇到這個問題,首先判斷一下是否是混淆問題。如果最近內建過第三方SDK,那麼就去讓他們提供一下混淆規則。

我這個比較坑的是找到第三方,對方說沒有混淆規則,然後我隻能自己看報錯資訊解決問題,其實應該很簡單,但是自己走了很多彎路,這裡記錄一下。

報錯如下:

2019-09-04 17:12:32.073 4478-4478/? E/zygote: Failed to register native method org.chromiun.base.library_loader.LibraryLoader.nativeRecordChromiumAndroidLinkerBrowserHistogram(ZZIJ)V in /data/app/com.daddad.client-utmpExwPmUn4MQO8sCy1IA==/base.apk!classes3.dex

2019-09-04 17:12:32.074 4478-4478/? E/chromiun: [0904/171232:ERROR:jni_generator_helper.h(28)] RegisterNatives failed in gen/base/base_jni_headers/base/jni/LibraryLoader_jni.h

2019-09-04 17:12:32.080 4478-4478/? E/AndroidRuntime: FATAL EXCEPTION: main

    Process: com.aa.client, PID: 4478

    java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/com.aa.client-utmpExwPmUn4MQO8sCy1IA==/lib/arm/libxwalkcore.so"

        at java.lang.Runtime.loadLibrary0(Runtime.java:1016)

        at java.lang.System.loadLibrary(System.java:1660)

        at com.aa.core.b.b.cp(Unknown Source:10)

        at com.aa.core.b.b.init(Unknown Source:171)

        at com.aa.eas.eclite.ui.EApplication.onCreate(Unknown Source:30)

        at com.kdweibo.android.config.Application.onCreate(Unknown Source:8)

        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1123)

        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6636)

        at android.app.ActivityThread.-wrap2(Unknown Source:0)

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2084)

        at android.os.Handler.dispatchMessage(Handler.java:109)

        at android.os.Looper.loop(Looper.java:166)

        at android.app.ActivityThread.main(ActivityThread.java:7555)

        at java.lang.reflect.Method.invoke(Native Method)

        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469)

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)

看到報錯資訊,習慣性的copy出下面的代碼,一頓百度,花了一上午時間,最後沒有解決問題。

混淆後應用閃退

其實重要的報錯資訊在上面:

混淆後應用閃退

提示的比較明顯,我這個閃退其實因為三方SDK裡面用的native方法,native方法被混淆後是找不到了。是以copy上面小框裡的代碼,輕按兩下shift搜尋一下,找到這個類,copy出包名,然後添加到 proguard-rules.pro 檔案中。

-keep class com.aa.core.** {*;}  (com.aa.core 換成複制的包名)      

其實挺簡單的過程,自己因為這個功能內建了三個SDK,剛開始隻添加了其中一個SDK的包名,沒有添加native所在SDK的包名,是以自己一直懷疑這種添加混淆的方式可不可行,導緻自己花費了很多時間。