【问题标题】:Android Build Error: Attribute Signature requires InnerClasses attribute. Check -keepattributes directiveAndroid 构建错误:属性签名需要 InnerClasses 属性。检查 -keepattributes 指令
【发布时间】:2019-02-14 14:15:18
【问题描述】:

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

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

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

-keepattributes Signature

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

【问题讨论】:

  • 您能否在您的 proguard 配置中添加 -keepattributes InnerClasses 并检查一下。
  • @kj007 是的,它有效,我认为它指的是一些签名的内部类。它的写法对我来说有点模棱两可
  • 我已经发布了我的答案。
  • 我还添加了签名不起作用的可能原因。

标签: android android-gradle-plugin android-proguard


【解决方案1】:

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

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

-keepattributes InnerClasses

InnerClasses(Java 5 或更高版本)

指定一个类和它的内部类之间的关系和 外部类。除了这个和带有'$'的命名约定 内部类和外部类名称之间的分隔符,inner 课程就像普通课程一样。编译器可能需要这个 查找已编译库中引用的类的信息。代码可能 通过反射访问此信息,例如导出 类的简单名称。

签名(Java 8 或更高版本)

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

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

Proguard options

【讨论】:

  • 花了我一生才找到这个解决方案
【解决方案2】:

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

keepattributes [attribute_filter]

指定要保留的任何可选属性。属性可以 用一个或多个 -keepattributes 指令指定。可选的 filter 是以逗号分隔的属性名称列表。属性名称 可以包含 ?、* 和 ** 通配符,并且可以在它们前面加上 ! 否定者。典型的可选属性是 Exceptions、Signature、 已弃用,SourceFile,SourceDir,LineNumberTable, LocalVariableTable, LocalVariableTypeTable, Synthetic, EnclosureMethod,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 2016-07-29
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多