Android Studio 和 ProGuard:无法解析符号 getDefaultProguardFile?

Android Studio & ProGuard: cannot resolve symbol getDefaultProguardFile?

IDE: Android Studio 1.1.0

主题:ProGuard

问题:Android Studio 无法识别 ProGuard 文件或工具,getDefaultProguardFile 无法解决应用程序中没有 proguard-android.txtproguard-rules.txt 文件,请参见下图:(来自 build.gradle)

如何解决这个问题并为我的应用实现 ProGuard 保护?

尝试改成-

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

我真的遇到了同样的问题。所以这就是让我的项目成功的原因:

release {
    minifyEnabled true
    proguardFile 'proguard-rules.pro'
}

通过此代码测试:

 Log.d(TAG, "TEST!");
 Log.i(TAG, "INFO!");
 Log.e(TAG, "ERROR!");

在 proguard.pro 中,我放置了这个片段(它删除了字节码中的所有 Log.d-语句)

-assumenosideeffects class android.util.Log {
    public static int d(...);
}

猫说:

MainAct﹕ INFO!
MainAct﹕ ERROR!

-> 正是我试图实现的目标:)

PS:假设您在模块(又名 'app')文件夹中有 proguard.pro 文件。

就我而言:

buildTypes {
    release {
        runProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

runProguard false 替换为 minifyEnabled false 有效。

我遇到了与此处所示相同的问题:

错误消息使文件看起来好像没有找到,因此没有被读取。但是,我进入 sdk/tools/proguard 文件夹找到文件,并在顶部添加了一条语句来测试文件是否真正被读取。我放在最上面"Will this crash it?"

从报错中可以看出,在构建过程中确实找到了该文件,我添加的语句使它崩溃了。因此, "can't resolve symbol" 错误似乎给出了误报。

尝试:

proguardFiles.add(file('proguard-android.txt')) proguardFiles.add(file('proguard-rules.txt'))

此结构适用于 gradle-experimental 插件。

我解决了 Android Studio 使用双引号而不是单引号无法识别方法的问题。以下是我最终使用的:

    release{
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile("proguard-android.txt"),
                "proguard-rules.pro"
    }

试试这个,

{
  minifyEnabled false
  // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
  proguardFiles 'proguard-rules.pro'
}