在尝试以发布模式构建应用程序时,我遇到了这个错误。
错误:属性"Signature"要求"InnerClasses"属性。请检查-keepattributes指令
我的proguard-rules.pro
行看起来像这样:
-keepattributes Signature
< p >编译器指的是哪些InnerClasses?我漏掉了什么?< /p >
在尝试以发布模式构建应用程序时,我遇到了这个错误。
错误:属性"Signature"要求"InnerClasses"属性。请检查-keepattributes指令
我的proguard-rules.pro
行看起来像这样:
-keepattributes Signature
< p >编译器指的是哪些InnerClasses?我漏掉了什么?< /p >
签名(Java 8或更高版本)仅适用于Java 8或更高版本和InnerClasses(Java 5或更高版本),因此请检查您的Android Studio是否使用Java SDK版本。 请使用以下设置更新您的Proguard配置:
将此行添加到您的proguard-rules.pro
文件中:
-keepattributes InnerClasses
InnerClasses(Java 5 或更高版本)
指定类与其内部类和外部类之间的关系。除了这一点和使用“$”作为内部类和外部类名称之间分隔符的命名约定外,内部类就像普通类一样。编译器可能需要此信息以查找在已编译库中引用的类。代码可以通过反射来访问此信息,例如派生类的简单名称。
Signature(Java 8 或更高版本)
指定类、字段或方法的泛型签名。编译器可能需要此信息来正确编译使用已编译库中的泛型类型的类。代码可以通过反射访问此签名。
有关-keepattributes
和更多可应用的设置的详细信息,请参见以下链接。
keepattributes [attribute_filter]
指定要保留的任何可选属性。可以使用一个或多个-keepattributes指令指定属性。可选过滤器是由逗号分隔的属性名称列表。属性名称可以包含?、*和**通配符,并且可以在!否定符之前。典型的可选属性包括Exceptions、Signature、Deprecated、SourceFile、SourceDir、LineNumberTable、LocalVariableTable、LocalVariableTypeTable、Synthetic、EnclosingMethod、RuntimeVisibleAnnotations、RuntimeInvisibleAnnotations、RuntimeVisibleParameterAnnotations、RuntimeInvisibleParameterAnnotations和AnnotationDefault。InnerClasses属性名称也可以被指定,指的是该属性的源名称部分。例如,在处理库时,应至少保留Exceptions、InnerClasses和Signature属性。对于生成有用的混淆堆栈跟踪,还应保留SourceFile和LineNumberTable属性。最后,如果您的代码依赖于它们,您可能需要保留注释。仅在混淆时适用。
将此行添加到proguard-rules.pro文件中
-keepattributes InnerClasses