我浏览了文档,寻找如何在运行 gradle 但保留插件时禁用 dexguard:'dexguard'。
我试图修改 proguardFile getDefaultDexGuardFile('dexguard-debug.pro')什么都不做,但不幸的是没有运气。我需要为我的功能测试套装 MonkeyTalk 设置没有 dexguard 功能,它现在无法检测 apk。
如何关闭 dexguard 功能?
我浏览了文档,寻找如何在运行 gradle 但保留插件时禁用 dexguard:'dexguard'。
我试图修改 proguardFile getDefaultDexGuardFile('dexguard-debug.pro')什么都不做,但不幸的是没有运气。我需要为我的功能测试套装 MonkeyTalk 设置没有 dexguard 功能,它现在无法检测 apk。
如何关闭 dexguard 功能?
更新 zatziky 对当前 Android Gradle 插件(v1.0+)和 Dexguard 插件(6.1.+)的回答
要创建 dexguard 插件开关,您可以执行以下操作
在您的根目录build.gradle
中添加一个属性ext
(如果尚未完成,则创建它,请参阅此处为什么要这样做)
ext {
enableDexGuardPlugin = false
....
}
在您的应用程序 build.gradle 中添加这样的插件:
apply plugin: 'com.android.application'
if(rootProject.ext.enableDexGuardPlugin) {
apply plugin: 'dexguard'
}
如果您有图书馆项目,请这样做
apply plugin: 'com.android.library'
if(rootProject.ext.enableDexGuardPlugin) {
apply plugin: 'dexguard'
}
getDefaultDexGuardFile('dexguard-release.pro')
如果您不需要它们,请从您的调试构建类型(尤其是)中删除所有 proguard 配置。不幸的是,至少对于 lib 项目,所有的构建类型都是在 assembleDebug 中构建的,所以你必须getDefaultDexGuardFile
像zatziky说的那样提供一个存根:
private File getDefaultDexGuardFile(String name) { new File(name) }
您可以将其添加到您的根目录build.gradle
,以便每个脚本都有它。
现在,如果您期望从中获得巨大的性能收益,您可能会感到失望。关键是在调试版本上禁用 ALL minifyEnabled
,因为如前所述,目前 gradle android 是愚蠢的并且可以构建所有构建类型(至少使用库)。您可以使用上面的属性:enableDexGuardPlugin
release {
...
minifyEnabled rootProject.ext.enableDexGuardPlugin
...
}
无法保持 dexguard 插件开启。
这是 Eric La Fortune 发给我的一种解决方法,它有效(Dexguard 6.x):
要禁用 DexGuard,您需要恢复为 Android 插件。您可以创建一个单独的 Gradle 构建文件。或者,您可以使用 Groovy 选择首选插件。例如在
build.gradle:
boolean dexguard = ......
apply plugin: dexguard ? 'dexguard' : 'android'
您还可以以相同的方式调用实用程序方法 getDefaultDexGuardFile:
runProguard true
proguardFile dexguard ?
getDefaultDexGuardFile('dexguard-release.pro') :
getDefaultProguardFile('proguard-android.txt')
您确实需要在构建文件中定义此方法的虚拟版本,以防选择标准 Android 插件。在这两种情况下都不会调用它,但它解决了标准插件缺少的方法定义:
private File getDefaultDexGuardFile(String name) { new File(name) }
在最新版本的 DexGuard 中,您可以通过不列出“proguardFile”行来禁用特定构建变体的处理。
例如,要在调试版本中禁用它:
buildTypes {
debug {
}
release {
proguardFile getDefaultDexGuardFile('dexguard-release.pro')
proguardFile 'dexguard-project.txt'
proguardFile 'proguard-project.txt'
}
}
编辑- 所有 proguardFiles 必须消失才能正常工作