尝试在发布模式下构建应用程序时,我遇到此错误。
错误:属性签名需要InnerClasses属性。检查-keepattributes指令
我的proguard-rules.pro
线看起来像这样:
-keepattributes Signature
编译器指的是什么InnerClasses?我在省什么?
Signature(Java 8或更高版本)仅适用于Java 8或更高版本以及InnerClasses(Java 5或更高版本),因此请检查您的Android Studio是否使用Java SDK版本。请使用以下设置更新您的Proguard配置
将此行添加到proguard-rules.pro
文件中:
-keepattributes InnerClasses
InnerClasses(Java 5或更高版本)
指定类及其内部类和外部类之间的关系。除此之外,内部类和外部类的名称之间使用'$'分隔符的命名约定,内部类就像普通类一样。编译器可能需要此信息来查找已编译库中引用的类。代码可以通过反射访问此信息,例如派生类的简单名称。
签名(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