如何解决 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不混淆局部变量的问题,以及如何使用混淆好的包