Android Build Error:属性签名需要InnerClasses属性。检查-keepattributes指令

问题描述 投票:3回答:2

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

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

我的proguard-rules.pro线看起来像这样:

-keepattributes Signature

编译器指的是什么InnerClasses?我在省什么?

android android-gradle android-proguard
2个回答
8
投票

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

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

-keepattributes InnerClasses

InnerClasses(Java 5或更高版本)

指定类及其内部类和外部类之间的关系。除此之外,内部类和外部类的名称之间使用'$'分隔符的命名约定,内部类就像普通类一样。编译器可能需要此信息来查找已编译库中引用的类。代码可以通过反射访问此信息,例如派生类的简单名称。

签名(Java 8或更高版本)

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

有关-keepattributes的更多详情以及您可以申请的更多设置,请参阅以下链接。

Proguard options


0
投票

参考:https://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/tools/proguard/docs/index.html#manual/usage.html

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

更多细节发现于https://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/tools/proguard/docs/index.html#manual/usage.html

© www.soinside.com 2019 - 2024. All rights reserved.