我最近在我的应用程序中添加了一个库(Gracenote的'GNSDK'),现在正试图使用Proguard构建该应用程序。我成功构建并安装了一次应用程序的发布版本,但所有后续尝试都会产生此错误:
Unexpected error while evaluating instruction:
Class = [com/gracenote/gnsdk/GnManager]
Method = [<init>(Landroid/content/Context;Ljava/lang/String;I)V]
Instruction = [87] getfield #120
Exception = [java.lang.IllegalArgumentException] (Value "i" is not a
reference value [proguard.evaluation.value.UnknownIntegerValue])
Unexpected error while performing partial evaluation:
Class = [com/gracenote/gnsdk/GnManager]
Method = [<init>(Landroid/content/Context;Ljava/lang/String;I)V]
Exception = [java.lang.IllegalArgumentException] (Value "i" is not a reference value [proguard.evaluation.value.UnknownIntegerValue])
:app:proguardBetaRelease FAILED
Error:Execution failed for task ':app:proguardBetaRelease'.
值"i"不是参考值[proguard. evaluate . Value . unknownintegervalue] '
我试图强迫proguard单独离开库(因为这是调试版本和发布版本之间的唯一区别):
-keep class com.gracenote.** {
*;
}
但似乎没有什么区别。
关于如何调试或跟踪此错误有任何提示吗?我不确定为什么com.gracenote.gnsdk.GnManager
的构造器会失败。这个错误使它听起来像是得到了一个无效的输入。
我使用Android Studio 1.4,构建工具23.0.0.
我发现这是Proguard的一个bug: https://sourceforge.net/p/proguard/bugs/573/
看起来很快就要发布了。同时,您可以通过添加:
来解决这个问题。 -optimizations !class/unboxing/enum
对于它的价值,我发现这是一个java项目。我运行proguard的目标是1.8,而它应该是1.9。一旦我改变了它,它就工作了。
对于仍然面临这个问题的人。在我的情况下,我将android.enableR8=false
添加到gradle.properties
文件中,删除这一行修复了这个问题。
然而,它可能只有在使用一些旧的Android Gradle插件版本时才有帮助,因为这个属性在7.0版本中被完全删除了:
选项设置'android. 'enableR8=false'已弃用。它将在Android Gradle插件的7.0版本中被删除。您将无法再禁用R8