尝试在发布模式下构建应用程序时遇到此错误。
错误:属性签名需要InnerClasses属性。检查-keepattributes指令
我的proguard-rules.pro
行如下所示:
-keepattributes Signature
编译器指的是什么InnerClasses?我要省略什么?
答案 0 :(得分:7)
签名(Java 8或更高版本)仅适用于Java 8或更高版本以及InnerClasses(Java 5或更高版本),因此请检查您的Android Studio是否使用Java SDK版本。 请使用以下设置更新您的Proguard配置
将此行添加到您的proguard-rules.pro
文件中:
-keepattributes InnerClasses
InnerClasses(Java 5或更高版本)
指定一个类及其内部类之间的关系,以及 外层阶级。除此之外,以及带有“ $”的命名约定 内部类和外部类名称之间的分隔符,内部 类就像普通的类。编译器可能需要这个 查找在编译库中引用的类的信息。代码可能 通过反射访问此信息,例如得出 类的简单名称。
签名(Java 8或更高版本)
指定类,字段或方法的通用签名。 编译器可能需要此信息来正确编译 使用编译库中的泛型类型。代码可以访问此 通过反射签名。
有关-keepattributes
的更多详细信息以及您可以应用的更多设置,请参见下面的链接。
答案 1 :(得分:0)
保持对[attribute_filter]的贡献
指定要保留的所有可选属性。该属性可以 用一个或多个-keepattributes指令指定。可选的 filter是以逗号分隔的属性名称列表。属性名称 可以包含?,*和**通配符,并且可以在!之前加上通配符! 否定者。典型的可选属性是“异常”,“签名”, 不推荐使用,SourceFile,SourceDir,LineNumberTable, LocalVariableTable,LocalVariableTypeTable,Synthetic, EnclosingMethod,RuntimeVisibleAnnotations, RuntimeInvisibleAnnotations,RuntimeVisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations和AnnotationDefault。的 还可以指定InnerClasses属性名称,请参考 此属性的源名称部分。例如,您至少应 保留Exceptions, InnerClasses 和Signature属性 处理库。您还应该保留SourceFile和 LineNumberTable属性用于产生有用的混淆堆栈 痕迹。最后,如果您的代码取决于您,则可能需要保留注释 在他们。仅适用于混淆。
在proguard-rules.pro文件中添加此行
-keepattributes InnerClasses
找到的更多详细信息