proguard gradle debug build但不是测试

时间:2014-01-30 17:15:49

标签: android gradle instrumentation

我使用以下命令为调试版本启用了proguard:

android {
    buildTypes {
        debug {
            runProguard true
            proguardFile 'proguard-debug.txt'
        }
        release {
            runProguard true
            proguardFile 'proguard-project.txt'
            zipAlign true
        }
    }
}

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

3 个答案:

答案 0 :(得分:17)

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')
    }

答案 1 :(得分:10)

从特定于测试应用的debug引入一个新的构建类型“派生”,再次禁用ProGuard,如

android {
    buildTypes {
        debugTest.initWith(debug)
        debugTest {
            minifyEnabled false
        }
    }
}

并通过将其名称分配给testBuildType属性

,将该构建类型用于测试应用
android {
    testBuildType 'debugTest'
}

答案 2 :(得分:4)

gradle.projectsEvaluated {
    proguardDebugTest.enabled = false
}

它在您的构建脚本中。

这里有两件事要知道:

编辑:

一个小注意事项:它会禁用任务,但会使构建失败。这是因为:preDexDebugTest任务不会与proguard一起运行。到目前为止,我发现的最佳解决方案是调试特定的proguard配置。更多细节here。创建一个单独的proguard配置文件,包括常规proguard文件,如下所示:

-include proguard.cfg

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

-dontwarn org.mockito.**
-dontwarn sun.reflect.**
-dontwarn android.test.**