Android构建错误:属性签名需要InnerClasses属性。Check-keepattributes指令

Android构建错误:属性签名需要InnerClasses属性。Check-keepattributes指令,android,android-gradle-plugin,android-proguard,Android,Android Gradle Plugin,Android Proguard,我在尝试以发布模式构建应用程序时遇到此错误 错误:属性签名需要InnerClasses属性。Check-keepattributes指令 我的proguard rules.pro行如下所示: -keepattributes Signature 编译器引用的是什么内部类?我省略了什么?签名(Java 8或更高版本)仅适用于Java 8或更高版本和内部类(Java 5或更高版本),因此请检查您的Android Studio是否使用Java SDK版本。 请使用以下设置更新您的Proguard配置

我在尝试以发布模式构建应用程序时遇到此错误

错误:属性签名需要InnerClasses属性。Check-keepattributes指令

我的
proguard rules.pro
行如下所示:

-keepattributes Signature
编译器引用的是什么内部类?我省略了什么?

签名(Java 8或更高版本)仅适用于Java 8或更高版本和内部类(Java 5或更高版本),因此请检查您的Android Studio是否使用Java SDK版本。 请使用以下设置更新您的Proguard配置

将此行添加到您的
proguard rules.pro
文件中:

-keepattributes InnerClasses
内部类(Java5或更高版本)

指定类与其内部类之间的关系,以及 外层阶级。除此之外,还有带“$”的命名约定 内部类和外部类名称之间的分隔符,内部 班级就像普通班级一样。编译器可能需要这样做 查找已编译库中引用的类的信息。代码可能 通过反射访问此信息,例如,导出 类的简单名称

签名(Java 8或更高版本)

指定类、字段或方法的泛型签名。 编译器可能需要这些信息来正确编译 使用编译库中的泛型类型。代码可以访问此 反射式签名

有关
-keepattributes
的更多详细信息以及您可以应用的更多设置,请参阅下面的链接

参考:

保留属性[属性过滤器]

指定要保留的任何可选属性。属性可以 可以使用一个或多个-keepattributes指令指定。可选的 筛选器是以逗号分隔的属性名称列表。属性名称 可以包含?、*、和**通配符,并且可以在它们前面加上! 否定词。典型的可选属性是异常、签名、, 已弃用,SourceFile,SourceDir,LineNumberTable, LocalVariableTable,LocalVariableTypeTable,合成, EnclosingMethod、RuntimeVisibleAnnotations、, RuntimeInvisibleAnnotations、RuntimeVisibleParameterAnnotations、, RuntimeInvisibleParameterAnnotations和AnnotationDefault。这个 也可以指定InnerClasses属性名称,参考 源名称是此属性的一部分。例如,你至少应该 保留异常、内部类和签名属性 正在处理库。您还应该保留源文件和 LineNumberTable属性,用于生成有用的模糊堆栈 踪迹。最后,如果代码依赖于注释,则可能需要保留注释 在他们身上。仅适用于模糊处理

在proguard-rules.pro文件中添加此行

-keepattributes InnerClasses

中可以找到更多详细信息,请在proguard配置中使用-keepattributes innerClass并进行检查。@kj007是的,它起作用了,我想它指的是一些签名的内部类。它的书写方式有点模棱两可,因为我已经发布了我的答案。我还添加了可能的原因是没有工作签名。我花了一生的时间才找到这个解决方案