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

Posted

技术标签:

【中文标题】Android Studio & ProGuard:无法解析符号 getDefaultProguardFile?【英文标题】:Android Studio & ProGuard: cannot resolve symbol getDefaultProguardFile? 【发布时间】:2015-06-14 04:06:20 【问题描述】:

IDEandroid Studio 1.1.0

主题:ProGuard

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

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

【问题讨论】:

嗨。 Android Studio 生成的默认文件名似乎是 proguard-rules.pro。你的 gradle 文件中显示的是 proguard-rules.txt。它可能只是文件名。 尝试重建您的项目,然后将项目与 gradle 文件同步。 我做了,还是一样 我使用的是 Android Studio 1.5.1。就我而言,它就像一个魅力。请您发布您的dependencies ... 吗? 在同一位置剪切和粘贴代码消除了我的错误警告。我对“signingConfigs”有同样的问题/修复。它从来没有阻止我编译,所以也许这是一个误报,至少在我的情况下。 【参考方案1】:

我遇到了同样的问题:

错误消息使文件看起来好像没有找到,因此没有被读取。但是,我进入 sdk/tools/proguard 文件夹找到该文件,并在顶部添加了一条语句来测试该文件是否真的被读取。我在顶部放了“这会崩溃吗?”

从错误中可以看出,确实在构建过程中找到了该文件,并且我添加的语句将其崩溃。因此,“无法解析符号”错误似乎是误报。

【讨论】:

【参考方案2】:

试着换成-

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

【讨论】:

我做到了,它实际上不起作用Android Studio无法识别方法getDefaultProguardFile @FadiObaji 你的应用文件夹下有“proguard-rules.pro”文件吗? 确保你的 gradle 文件顶部有这一行" apply plugin: 'com.android.application'" 是的,它在那里,仍然没有运气,我想如果我从 sdk 文件夹中删除 tools 文件夹然后重新下载它将解决问题,因为我复制了整个 SDK 文件夹从另一个窗口 可能是一个原因。祝您旅途愉快:|【参考方案3】:

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

release 
    minifyEnabled true
    proguardFile 'proguard-rules.pro'

通过此代码测试:

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

在 proguard.pro 中,我放置了这个 sn-p(它会删除字节码中的所有 Log.d-Statements)

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

猫说:

MainAct﹕ INFO!
MainAct﹕ ERROR!

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

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

【讨论】:

实际上,当我创建signed apk 时,一切正常,我反编译了文件以查看proguard 是否有效并且确实有效,我不知道为什么android studio 说@987654330 @ 哦,不错。在我的情况下(隐藏日志),如果我按照上面写的方式设置文件,AS 只会运行 proguard 配置。 我认为proguard 会从您的应用程序中删除所有logs 而不告诉它这样做,它在proguard 描述中 这不应该是默认行为.. (AFAIK)^^ options.compilerArgs 这样的其他方法呢?我也有cannot resolve symbol options【参考方案4】:

试试:

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

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

试试这个,


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

【讨论】:

【参考方案7】:

就我而言:

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

runProguard false 替换为minifyEnabled false 有效。

【讨论】:

minifyEnabled false 将禁用 ProGuard 混淆

以上是关于Android Studio & ProGuard:无法解析符号 getDefaultProguardFile?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 安装 Android Studio

如何从 bash 脚本并行运行多个程序?

安装android studio&flutter

1. Android Studio阅读源码

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

Android Studio 在字符串中不显示“&”符号