proguard gradle debug build但不是测试

App*_*als 15 instrumentation android gradle

我使用以下命令启用了proguard for debug build:

android {
    buildTypes {
        debug {
            runProguard true
            proguardFile 'proguard-debug.txt'
        }
        release {
            runProguard true
            proguardFile 'proguard-project.txt'
            zipAlign true
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我执行此操作时遇到的问题是gradle构建还希望在proguardDebugTest任务期间进行测试.我似乎无法修改以访问此特定任务.有没有办法我可以调试调试apk而不是测试apk?

小智 18

runProguard很老了.它被minifyEnabled取代

使用minifyEnabled(以及新版gradle中的其他更改),您可能会遇到proguard配置适用于您的调试apk但不适用于检测测试的问题.为检测测试创建的apk将使用自己的proguard文件,因此更改现有的proguard文件将不起作用.

在这种情况下,您需要指定要在检测测试中使用的proguard文件.它可以非常宽松,因为它根本不会影响您的调试和发布版本.

    // inside android block
    debug {
        shrinkResources true  // removes unused graphics etc
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        testProguardFile('test-proguard-rules.pro')
    }
Run Code Online (Sandbox Code Playgroud)


ssc*_*rth 10

debug特定的测试应用程序中引入一个新的构建类型"派生",再次禁用ProGuard

android {
    buildTypes {
        debugTest.initWith(debug)
        debugTest {
            minifyEnabled false
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并通过将其名称分配给testBuildType属性来为测试应用程序使用该构建类型

android {
    testBuildType 'debugTest'
}
Run Code Online (Sandbox Code Playgroud)


小智 3

gradle.projectsEvaluated {
    proguardDebugTest.enabled = false
}
Run Code Online (Sandbox Code Playgroud)

它在你的构建脚本中。

这里有两件事需要知道:

  • Gradle 的一般功能是启用/禁用任务
  • Android Gradle 插件特定于 中延迟创建任务afterEvaluate,因此您还需要将任务禁用延迟到 中afterEvaluate

编辑:

一个小注意事项:它会禁用任务但构建失败。这是因为 :preDexDebugTest 任务不会在 proguard 打开时运行。到目前为止我发现的最好的解决方案是调试特定的混淆器配置。更多详细信息请参见此处。创建一个单独的 proguard 配置文件,包括常规 proguard 文件,如下所示:

-include proguard.cfg
Run Code Online (Sandbox Code Playgroud)

并添加测试配置。对我来说是:

-dontwarn org.mockito.**
-dontwarn sun.reflect.**
-dontwarn android.test.**
Run Code Online (Sandbox Code Playgroud)