使用Android Studio和Gradle的未知类“对象”的Proguard注意事项

时间:2013-11-22 01:12:19

标签: android gradle android-studio proguard

我在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插件的一个良性问题?

2 个答案:

答案 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来写出完整的配置并查找引用。它可能是方法参数或返回值,很容易被忽略。