我最近升级了android studio但是我无法找到android studio 3.1中报告的以下问题的来源:
Warning: The rule `-keep public class *extends java.lang.annotation.Annotation {
这个警告似乎可能被切断,而且缺少信息。但它看起来像一个proguard问题,虽然我在构建调试变量时收到此警告。我检查了我的proguard文件,我没有完全匹配的行。我搜索了整个项目。关于根本原因的任何想法?
正如@ 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!
在应用程序依赖中使用了实现'com.android.support:support-annotations:27.1.1'
版本根据您的应用程序compat版本选择
在我的情况下,更改Gradle版本后出现警告。一旦我使缓存无效并重新启动Android Studio,警告就会消失。
从菜单中:文件>无效缓存并重新启动
您缺少通配符*
和关键字extends
之间的空格。警告本身可能不是来自ProGuard,而是来自谷歌的内置缩小器。
如果您在项目中找不到它,那么它很可能是依赖的aar文件中包含的消费者Proguard文件的破坏规则。
由于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'
}
我从app的build gradle defaultConfig中删除了“multiDexEnabled true”,并且WARNING消失了:
defaultConfig {
...
//multiDexEnabled true
}
dexOptions {
javaMaxHeapSize "Xg"
}
祝好运)
类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
Gradle版本:3.1.4
MultiDex:已启用
在我的情况下,我忘了为一些字符串资源添加翻译。添加后没有错误/警告。
当您在Google Play商店上传新的升级版本并且上传大多数用户点击保留然后提交后,会出现此问题。不要点击保留只是上传和提交。您的apk文件已成功上传并保留文件自动丢弃并设置为停用模式。
请记住:确保将新更新的所有详细信息与旧版本不同。
我的gradle版本是我升级到com.android.tools.build:gradle:3.3.2的问题,错误消失了。