2

我浏览了文档,寻找如何在运行 gradle 但保留插件时禁用 dexguard:'dexguard'。

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

如何关闭 dexguard 功能?

4

3 回答 3

4

更新 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 中构建的,所以你必须getDefaultDexGuardFilezatziky说的那样提供一个存根:

private File getDefaultDexGuardFile(String name) { new File(name) }

您可以将其添加到您的根目录build.gradle,以便每个脚本都有它。

现在,如果您期望从中获得巨大的性能收益,您可能会感到失望。关键是在调试版本上禁用 ALL minifyEnabled,因为如前所述,目前 gradle android 是愚蠢的并且可以构建所有构建类型(至少使用库)。您可以使用上面的属性:enableDexGuardPlugin

release {
    ...
    minifyEnabled rootProject.ext.enableDexGuardPlugin
    ...
}
于 2015-06-07T09:34:11.890 回答
2

无法保持 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) }
于 2014-12-16T15:56:10.843 回答
2

在最新版本的 DexGuard 中,您可以通过不列出“proguardFile”行来禁用特定构建变体的处理。

例如,要在调试版本中禁用它:

buildTypes {
    debug {
    }
    release {
        proguardFile getDefaultDexGuardFile('dexguard-release.pro')
        proguardFile 'dexguard-project.txt'
        proguardFile 'proguard-project.txt'
    }
}

编辑- 所有 proguardFiles 必须消失才能正常工作

于 2015-04-14T15:27:05.050 回答