debug模式没有错,release报错
具体报错代码:
java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/com.adolf.learnwordx-2/lib/arm64/libauth.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:989)
at java.lang.System.loadLibrary(System.java:1530)
at com.adolf.auth.Auth.<clinit>()
at com.adolf.auth.Auth.a()
at b.e.a.b.b.j()
at b.e.a.b.b.k()
at com.adolf.wordmaster.base.AppContext.onCreate()
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1025)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5403)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
解决过程
先查看build.gradle文件中,buildTypes标签是否对debug和release设置不同,如下:
buildTypes {
debug {
applicationIdSuffix ".debug"
}
release {
minifyEnabled true
zipAlignEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
// ...
}
可以看到debug没有设置混淆,release设置了混淆,接着进行测试,将release的混淆关闭,发现报错消失,我们可以确定是混淆出了问题
在从报错中看:
出现了混淆的标志,a b c…代替包名类名方法名
可以通过app/build/outputs/mapping/**/mapping.txt
文件来查到混淆前的包名类名方法名
得到包名类名后,就可以在混淆文件中将该包或类关闭混淆
# 不混淆某个包所有的类
-keep class com.adolf.aliyunlogsdk.** { *; }
# 不混淆某个类
-keep class com.adolf.auth.Auth { *; }
版权声明:本文为Puffer_fish原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。