安卓混淆相关-debug模式没有错,release报错

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的混淆关闭,发现报错消失,我们可以确定是混淆出了问题

在从报错中看:

img

出现了混淆的标志,a b c…代替包名类名方法名

可以通过app/build/outputs/mapping/**/mapping.txt文件来查到混淆前的包名类名方法名

img

得到包名类名后,就可以在混淆文件中将该包或类关闭混淆

# 不混淆某个包所有的类
-keep class com.adolf.aliyunlogsdk.** { *; }
# 不混淆某个类
-keep class com.adolf.auth.Auth { *; }

版权声明:本文为Puffer_fish原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。