如何禁用Dexguard?

时间:2014-12-16 15:52:22

标签: android-gradle monkeytalk dexguard

我查看了文档,了解如何在运行gradle时禁用dexguard但保留插件:'dexguard'。

我试图修改proguardFile getDefaultDexGuardFile('dexguard-debug.pro')什么都不做,但遗憾的是没有运气。我需要为我的功能测试套装MonkeyTalk设置没有dexguard功能,它现在无法检测到apk。

如何关闭dexguard功能?

3 个答案:

答案 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必须消失才能正常工作