Android 构建错误:属性签名需要 InnerClasses 属性.检查 -keepattributes 指令



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

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

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

-keepattributes Signature

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

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

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

-keepattributes InnerClasses

InnerClasses(Java 5或更高版本(

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

签名(Java 8 或更高版本(

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

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

保护选项

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

保持属性 [attribute_filter]

指定要保留的任何可选属性。属性可以 使用一个或多个 -keepattributes 指令指定。可选 筛选器是以逗号分隔的属性名称列表。属性名称 可以包含 ?、* 和 ** 通配符,并且可以在前面加上 ! 否定者。典型的可选属性是例外、签名、 已弃用, 源文件, 源目录, 行号表, LocalVariableTable, LocalVariableTypeTable, Synthetic, 封闭方法, 运行时可见注释, 运行时不可见注解, 运行时可见参数注解, 运行时不可见参数注释和注释默认值。这 也可以指定 InnerClasses 属性名称,参考 源名称 此属性的一部分。例如,您至少应该 在以下情况下保留异常、内部类和签名属性 处理库。您还应该保留源文件和 用于生成有用的混淆堆栈的 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

最新更新