我在Android Studio中创建了一个新项目,并使用Gradle构建它。
我已经为发布版本添加了我的Proguard集成,每次运行assembleRelease
步骤时我都会看到此注释:
Note: the configuration refers to the unknown class 'Object'
Maybe you meant the fully qualified name 'java.lang.Object'?
我的Proguard配置文件或Android SDK文件夹中没有包含非限定名称Object
。
我的build.gradle
包括:
buildTypes {
release {
runProguard true
proguardFile 'proguard-project.txt'
proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
signingConfig signingConfigs.release
}
}
当我删除上面的proguardFile
行时,以及删除我的自定义Proguard规则(每次在重建之前进行清理)时,我甚至会看到相同的注释。
我猜这是Gradle的Proguard插件的一个良性问题?
答案 0 :(得分:12)
感谢Eric Lafortune的建议!将-printconfiguration
添加到我的proguard.txt后发现问题出在google-play-services_lib(r13)中。
有罪的Proguard规则是(它应该是java.lang.Object[][]
):
-keep class * extends java.util.ListResourceBundle {
protected Object[][] getContents();
}
您可以在Mac上通过右键点击Android Studio
,执行Show Package Contents
,然后浏览到sdk/extras/google/google_play_services/libproject/google-play-services_lib/proguard.txt
来查看此内容。
最快的解决方法是将正确的Proguard规则添加到您自己的Proguard配置中,然后忽略Proguard Note。
-keep class * extends java.util.ListResourceBundle {
protected java.lang.Object[][] getContents();
}
我将此错误提交给了Google Android Issue #63095。
答案 1 :(得分:6)
我不知道Android SDK中对Object
的任何不合格的引用,但您可以指定选项-printconfiguration config.txt
来写出完整的配置并查找引用。它可能是方法参数或返回值,很容易被忽略。