Android Studio & ProGuard:无法解析符号 getDefaultProguardFile?
Posted
技术标签:
【中文标题】Android Studio & ProGuard:无法解析符号 getDefaultProguardFile?【英文标题】:Android Studio & ProGuard: cannot resolve symbol getDefaultProguardFile? 【发布时间】:2015-06-14 04:06:20 【问题描述】:IDE:android Studio 1.1.0
主题:ProGuard
问题:Android Studio 无法识别 ProGuard 文件或工具,getDefaultProguardFile
无法解决并且应用中没有 proguard-android.txt
和 proguard-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?的主要内容,如果未能解决你的问题,请参考以下文章