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

问题描述 投票:40回答:11

我最近升级了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文件,我没有完全匹配的行。我搜索了整个项目。关于根本原因的任何想法?

android proguard
11个回答
21
投票

正如@ arcone1,@ Vincent Mattana的问题评论中提到的并且@random确认,问题已在Android Studio 3.2中得到解决。

来自issue in Google Issue Tracker

为了澄清,这是来自R8的警告,而不是错误,我们用它来计算遗留多索变体中主dex的类列表。它不会影响输出,也不会导致构建或运行时故障。 我正在修改一个修复程序,将此保留规则更改为“-keep public class * implements java.lang.annotation.Annotation”,它在语义上是相同的,并删除警告。

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

更新:3.2 is out


0
投票

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

版本根据您的应用程序compat版本选择


0
投票

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

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

invalidate caches & restart


17
投票

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

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


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
投票

我从app的build gradle defaultConfig中删除了“multiDexEnabled true”,并且WARNING消失了:

defaultConfig {
    ...

    //multiDexEnabled true
}

dexOptions {
    javaMaxHeapSize "Xg"
}

祝好运)


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时,此警告可能源自某些引用库的“使用者”规则,在构建时进行模糊处理。

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

-dontwarn java.lang.annotation.Annotation

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

0
投票

Gradle版本:3.1.4

MultiDex:已启用

在我的情况下,我忘了为一些字符串资源添加翻译。添加后没有错误/警告。


0
投票

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

请记住:确保将新更新的所有详细信息与旧版本不同。


0
投票

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

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