android studio 3.1警告:规则`-keep public class * extends java.lang.annotation.Annotation {

时间:2018-03-27 16:31:57

标签: android proguard

我最近升级了android studio,但我无法找到android studio 3.1中报道的以下问题的来源:

Warning: The rule `-keep public class *extends java.lang.annotation.Annotation {

enter image description here

enter image description here

警告似乎可能会被切断并且缺少信息。但它看起来像一个proguard问题,虽然我在构建调试变量时收到此警告。我检查了我的proguard文件,我没有完全匹配的行。我搜索了整个项目。关于根本原因的任何想法?

11 个答案:

答案 0 :(得分:21)

正如@ arcone1的问题所述,@ Vincent Mattana&由@random确认,此问题已在Android Studio 3.2中解决。

来自issue in Google Issue Tracker

  

为了澄清,这是来自R8的警告,而不是错误,我们用它来计算传统multidex变体中主dex的类列表。它不会影响输出,也不会导致构建或运行时故障   我正在修改这个保持规则到#34; -keep public class * implements java.lang.annotation.Annotation&#34 ;,它在语义上是相同的,并删除警告。

所以,暂时忽略它或go bleeding edge with Canary(自担风险)。

更新3.2 is out

答案 1 :(得分:17)

您在通配符*和关键字extends之间缺少空格。 警告本身可能不是来自ProGuard,而是来自google的内置缩小器。

如果您在项目中找不到它,那么它很可能是依赖的aar文件中包含的消费者Proguard文件的破坏规则。

答案 2 :(得分:9)

由于gradle defaultConfig中的“ multiDexEnabled true” 设置,我遇到了同样的问题。

我通过添加multidex依赖项“实现'com.android.support:multidex:1.0.3'”

解决了此问题
android {
defaultConfig {
    ...
    multiDexEnabled true
}
...
}

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}

参考: https://developer.android.com/studio/build/multidex

答案 3 :(得分:3)

我从app的build gradle defaultConfig中删除了“multiDexEnabled true”,警告消失了:

defaultConfig {
    ...

    //multiDexEnabled true
}

dexOptions {
    javaMaxHeapSize "Xg"
}
祝你好运。

答案 4 :(得分:2)

我使用

android.support.annotation.Keep(Android Studio 3.1.2)...

-keep @interface android.support.annotation.Keep
-keep @android.support.annotation.Keep class *
-keepclasseswithmembers class * {
    @android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
    @android.support.annotation.Keep <methods>;
}

还有其他标志来控制要保留的注释:

-keepattributes RuntimeVisibleAnnotations
-keepattributes AnnotationDefault
-keepattributes *Annotation*

可以通过在终端选项卡中运行./gradlew assembleRelease来获取原始输出。

当项目的ProGuard配置中没有任何内容引用Annotation时,此警告可能来自&#34;消费者&#34;某些引用库的规则,在构建时进行模糊处理。

因此,这似乎是一个无害的警告,人们可以将其静音:

-dontwarn java.lang.annotation.Annotation

答案 5 :(得分:2)

  1. 打开build.gradle文件。
  2. 删除“ multiDexEnabled true”。
  3. 重建应用程序。

答案 6 :(得分:0)

版本版本: 3.1.4

MultiDex:已启用

就我而言,我忘记为某些字符串资源添加翻译。添加后无错误/警告。

答案 7 :(得分:0)

当您在Google Play商店上载新的升级版本,并且在大多数用户上载后单击保留然后提交时,就会出现此问题。不要单击“保留”,只需上传并提交即可。您的apk文件成功上传,保留文件自动丢弃并设置为停用模式。

记住:请确保您输入的新更新的所有详细信息都不同于旧版本。

答案 8 :(得分:0)

我的gradle版本是我升级到com.android.tools.build:gradle:3.3.2的问题,错误消失了。

答案 9 :(得分:0)

在应用依赖项中使用了实现'com.android.support:support-annotations:27.1.1'

版本根据您的应用兼容版本

进行选择

答案 10 :(得分:0)

就我而言,警告是在更改Gradle版本后出现的。一旦我使缓存无效并重新启动Android Studio,警告就会消失。

从菜单中:“文件”>“使缓存无效并重新启动”

PEP 484