問題:本地調試運作沒有問題,打包後運作閃退。
如果你也遇到這個問題,首先判斷一下是否是混淆問題。如果最近內建過第三方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出下面的代碼,一頓百度,花了一上午時間,最後沒有解決問題。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL3YDO3MTNycTM0ATOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
其實重要的報錯資訊在上面:
提示的比較明顯,我這個閃退其實因為三方SDK裡面用的native方法,native方法被混淆後是找不到了。是以copy上面小框裡的代碼,輕按兩下shift搜尋一下,找到這個類,copy出包名,然後添加到 proguard-rules.pro 檔案中。
-keep class com.aa.core.** {*;} (com.aa.core 換成複制的包名)
其實挺簡單的過程,自己因為這個功能內建了三個SDK,剛開始隻添加了其中一個SDK的包名,沒有添加native所在SDK的包名,是以自己一直懷疑這種添加混淆的方式可不可行,導緻自己花費了很多時間。