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

Dan*_*n J 6 android proguard gradle android-studio

我在Android Studio中创建了一个新项目,并使用Gradle构建它.

我已经为发布版本添加了我的Proguard集成,每次运行我的assembleRelease步骤时我都会看到这个注释:

Note: the configuration refers to the unknown class 'Object'
      Maybe you meant the fully qualified name 'java.lang.Object'?
Run Code Online (Sandbox Code Playgroud)

我的Proguard配置文件或Android SDK文件夹中的所有文件都不包含非限定名称Object.

我的build.gradle包括:

buildTypes {
    release {
        runProguard true
        proguardFile 'proguard-project.txt'
        proguardFile getDefaultProguardFile('proguard-android-optimize.txt')

        signingConfig signingConfigs.release
    }
}
Run Code Online (Sandbox Code Playgroud)

当我删除proguardFile上面的两行时,我甚至会看到相同的注释,如果我删除了我的自定义Proguard规则(每次在重建之前进行清理).

我猜这是Gradle的Proguard插件的一个良性问题?

Dan*_*n J 12

感谢Eric Lafortune的建议!添加-printconfiguration到我的proguard.txt显示问题出在google-play-services_lib(r13)中.

有罪的Proguard规则(应该是java.lang.Object[][]):

-keep class * extends java.util.ListResourceBundle {
    protected Object[][] getContents();
}
Run Code Online (Sandbox Code Playgroud)

您可以通过右键单击Android Studio,执行Show Package Contents,然后浏览到Mac在Mac上看到此内容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();
}
Run Code Online (Sandbox Code Playgroud)

我将谷歌的这个错误提升为Android问题#63095.


Eri*_*une 6

我不知道ObjectAndroid SDK中有任何不合格的引用,但您可以指定-printconfiguration config.txt写出完整配置并查找引用的选项.它可能是方法参数或返回值,很容易被忽略.