Android Studio 和 ProGuard:无法解析符号 getDefaultProguardFile?
Android Studio & ProGuard: cannot resolve symbol getDefaultProguardFile?
IDE: Android Studio 1.1.0
主题:ProGuard
问题:Android Studio 无法识别 ProGuard 文件或工具,getDefaultProguardFile
无法解决应用程序中没有 proguard-android.txt
和 proguard-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'
}
IDE: Android Studio 1.1.0
主题:ProGuard
问题:Android Studio 无法识别 ProGuard 文件或工具,getDefaultProguardFile
无法解决应用程序中没有 proguard-android.txt
和 proguard-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'
}