Android Proguard 因"Value 'i' is not a reference value"而失败



我最近在我的应用程序中添加了一个库(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

相关内容

  • 没有找到相关文章

最新更新