当minifyEnabled为true时,Android应用程序崩溃

5

我正在使用一个多模块应用程序,当在installed模块的build.gradle中设置minifyEnabled true时,应用程序会崩溃。

以下是我从Play控制台检索到的反混淆堆栈跟踪信息。

 FATAL EXCEPTION: ControllerMessenger
Process: com.packagename, PID: 16978
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
    at com.packagename.login.Utils.AuthenticationActions.saveCredentials(AuthenticationActions.java)
    at com.packagename.login.LoginActivity$1$1.onCompleted(LoginActivity.java)
    at com.packagename.login.LoginActivity$1$1.onCompleted(LoginActivity.java)
    at com.koushikdutta.async.future.SimpleFuture.handleCallbackUnlocked(SimpleFuture.java)
    at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java)
    at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java)
    at com.koushikdutta.ion.IonRequestBuilder$EmitterTransform$1.onCompleted(IonRequestBuilder.java)
    at com.koushikdutta.async.future.SimpleFuture.handleCallbackUnlocked(SimpleFuture.java)
    at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java)
    at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java)
    at com.koushikdutta.ion.IonRequestBuilder$1.run(IonRequestBuilder.java)
    at com.koushikdutta.async.AsyncServer$RunnableWrapper.run(AsyncServer.java)
    at android.os.Handler.handleCallback(Handler.java:746)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at androidx.test.espresso.base.Interrogator.a(Interrogator.java:19)
    at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:166)
    at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:158)
    at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:34)
    at androidx.test.espresso.action.MotionEvents.a(MotionEvents.java:77)
    at androidx.test.espresso.action.MotionEvents.a(MotionEvents.java:52)
    at androidx.test.espresso.action.Tap.c(Tap.java:8)
    at androidx.test.espresso.action.Tap.b(Tap.java:18)
    at androidx.test.espresso.action.Tap$1.a(Tap.java:3)
    at androidx.test.espresso.action.GeneralClickAction.perform(GeneralClickAction.java:22)
    at androidx.test.espresso.ViewInteraction$SingleExecutionViewAction.perform(ViewInteraction.java:9)
    at androidx.test.espresso.ViewInteraction.a(ViewInteraction.java:79)
    at androidx.test.espresso.ViewInteraction.a(ViewInteraction.java:96)
    at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:3)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at android.os.Handler.handleCallback(Handler.java:746)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5459)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

我不明白这段代码是什么意思:'java.lang.Object java.util.List.get(int)'

我正在使用多个外部库,其中一个是ion koush

我尝试将以下内容添加到我的项目中的每个proguard-rules.pro文件中:-keep class com.koushikdutta.** { *;}。但是这并没有取得任何成功。


2
你是否正在使用某种将JSON转为POJO的库?如果POJO属性因压缩而更改名称,则可能无法将它们转换。请将这些pojos放入proguard规则中。 - Leonardo Velozo
你真是个救星 @LeoPelozo。我在每个模块的proguard-rules.pro文件中添加了-keep class com.packagename.**.data_models.** {*; },现在它可以正常工作了。请回复并简要解释一下。我会接受你的答案。非常感谢。 :) - Michael Hathi
2个回答

14

当应用程序将JSON转换为POJO且启用了缩小时,就会发生这种情况。缩小会更改这些POJO,使得转换变得不可能(它会编译,但是所有POJO的属性都将为空)。

通过将 -keep class com.packagename.<path to pojos> {*; } 添加到您的proguard规则文件中,保留这些POJO。


1
非常感谢你,兄弟。我已经搜索了很多天,找到了压缩解决方案崩溃的确切原因。 - Kartik Agarwal

5

同时,在所有的Pojo文件的类名之前添加"@Keep"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接