proguard gradle调试构建但不是测试

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

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

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

 gradle.projectsEvaluated { proguardDebugTest.enabled = false } 

它在你的构建脚本中。

这里有两件事要知道:

  • 一般Gradlefunction可启用/禁用任务 。
  • Android Gradle插件在afterEvaluate特定延迟创建任务,因此您还需要将任务的禁用推迟到afterEvaluate

编辑:

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

 -include proguard.cfg 

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

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

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

从特定于debug应用程序的debug引入一个新的构建types“派生”,再次禁用ProGuard

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

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

 android { testBuildType 'debugTest' }