我查看了文档,了解如何在运行gradle时禁用dexguard但保留插件:'dexguard'。
我试图修改proguardFile getDefaultDexGuardFile('dexguard-debug.pro')什么都不做,但遗憾的是没有运气。我需要为我的功能测试套装MonkeyTalk设置没有dexguard功能,它现在无法检测到apk。
如何关闭dexguard功能?
答案 0 :(得分:4)
更新zatziky对当前Android Gradle插件(v1.0 +)和Dexguard插件(6.1。+)
的回答要创建dexguard插件切换,您可以执行以下操作
在您的根build.gradle
中为您的ext
添加一个属性(如果尚未创建,则为see here why you would do that}
ext {
enableDexGuardPlugin = false
....
}
在您的app 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
,以便每个脚本都有它。
现在,如果您期望获得巨大的性能优势,那么您可能会失望。关键是在调试版本上禁用所有minifyEnabled
,因为如前所述gradle android之前是dumb并构建所有构建类型(至少使用libs)。您可以使用上面的属性:enableDexGuardPlugin
release {
...
minifyEnabled rootProject.ext.enableDexGuardPlugin
...
}
答案 1 :(得分:2)
无法启用dexguard插件。
这是Eric La Fortune发送给我的一个变通方法(Dexguard 6.x):
要禁用DexGuard,您需要恢复为Android插件。您可以创建一个单独的Gradle builld文件。或者,您可以使用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) }
答案 2 :(得分:2)
在最新版本的DexGuard中,您可以通过不列出'proguardFile'行来禁用特定构建变体的处理。
例如,要为调试版本禁用它:
buildTypes {
debug {
}
release {
proguardFile getDefaultDexGuardFile('dexguard-release.pro')
proguardFile 'dexguard-project.txt'
proguardFile 'proguard-project.txt'
}
}
编辑 - 所有proguardFiles必须消失才能正常工作