如何解决 Proguard 问题 - ArrayIndexOutOfBoundsException?

Posted

技术标签:

【中文标题】如何解决 Proguard 问题 - ArrayIndexOutOfBoundsException?【英文标题】:How to Solve Proguard Issue - ArrayIndexOutOfBoundsException? 【发布时间】:2019-04-20 20:51:22 【问题描述】:

我正在尝试为我的应用生成 APK。但是在构建编译器之后会抛出一个 java.lang.ArrayIndexOutOfBoundsException

我知道这个错误以编程方式意味着什么。但是如果我将minifyEnabled 禁用为False。然后生成 APK 并且应用程序运行良好。

I saw a similar question here & tried desugaring to false.

但它仍然抛出Process 'command 'C:\Program Files\android\Android Studio\jre\bin\java.exe'' finished with non-zero exit value 1

我该如何解决这个问题?

【问题讨论】:

这看起来像是 Android Studio 中的一个错误。请转到developer.android.com/studio/report-bugs 查找有关如何提交错误的信息。 这个问题你解决了吗? 【参考方案1】:

我的解决方法是将以下内容添加到我的 proguard-rules.pro 文件中:

-keepnames class com.google.android.gms.** *;

Google Play 服务插件中的某些东西导致我出现此错误。

如果这不能为您解决问题,您还可以通过将以下内容添加到您的 proguard-rules.pro 文件中来为您的应用程序包之外的任何内容保留名称:

-keepnames class !com.yourpackage.app.**  *; 

您也许还可以使用它来解决更多问题,以找出导致问题的类。

【讨论】:

是的,如果我设置 -keepnames class com.google.android.gms.** *; 就可以构建,但我不喜欢,因为它只保留了该库的所有内容,替代解决方案? @user155 我发现当我更新到 Android Studio 3.4.1 时,问题消失了,我可以删除 -keepnames class com.google.android.gms.** *; 我相信在 Android Studio 3.4 中,R8 将 Proguard 替换为默认代码压缩器和混淆器,我认为它解决了这个问题。 @Hayden Campbell 我遇到了与 OP 相同的问题,并通过简单地在 gradle.properties (android.enableR8=true) 中启用 R8 来修复它。

以上是关于如何解决 Proguard 问题 - ArrayIndexOutOfBoundsException?的主要内容,如果未能解决你的问题,请参考以下文章

Proguard 告诉我“请先更正上述警告。”。如何解决外部 jar 的引用?

如何使用 proguard 混淆 android 库(.aar)?

原创解决Maven ProGuard不混淆局部变量的问题,以及如何使用混淆好的包

如何在proguard中添加维生素?

如何在 Android Studio 中启用 ProGuard 混淆功能?

应用程序使用 proguard 崩溃