我正在研究一个Android应用,该应用处于SIT测试阶段。我的想法是向测试团队发布一个混淆了调试的版本。为此,我在build.gradle中添加了这段代码
buildTypes {
debug {
applicationIdSuffix ".debug"
debuggable true
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
此后,我的apk文件减少了,对此我感到满意。但是当我运行该应用程序并进行服务呼叫时,该应用程序崩溃了。
更多的坏消息是我无法读取任何日志,因为日志采用这种格式-
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method f.f.b.i.b, parameter errorType
at .a.f$a.<init>(Unknown Source:2)
at .a.h.c.a(:38)
at j.l.run(:83)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
[我注意到,当我将-dontobfuscate命令放在我的Proguard规则中时,它可以正常工作,否则会崩溃。我什至可以发现我的mapping.txt文件,但是我不知道如何解码该文件并读取日志。
我在这里做错什么了吗?
这可能与您使用Retrofit和Gson进行序列化有关。尝试将此行添加到您的Proguard配置中。
-keepclassmembers,allowobfuscation class * {
@com.google.gson.annotations.SerializedName <fields>;
}