我使用以下命令为调试版本启用了proguard:
android {
buildTypes {
debug {
runProguard true
proguardFile 'proguard-debug.txt'
}
release {
runProguard true
proguardFile 'proguard-project.txt'
zipAlign true
}
}
}
我执行此操作时遇到的问题是gradle构建还希望在proguardDebugTest任务期间进行测试。我似乎无法修改以访问此特定任务。有没有办法我可以调试调试apk而不是测试apk?
答案 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
}
它在您的构建脚本中。
这里有两件事要知道:
afterEvaluate
中特定延迟创建任务,因此您还需要将任务的停用时间推迟到afterEvaluate
。一个小注意事项:它会禁用任务,但会使构建失败。这是因为:preDexDebugTest任务不会与proguard一起运行。到目前为止,我发现的最佳解决方案是调试特定的proguard配置。更多细节here。创建一个单独的proguard配置文件,包括常规proguard文件,如下所示:
-include proguard.cfg
并添加测试配置。对我来说是:
-dontwarn org.mockito.**
-dontwarn sun.reflect.**
-dontwarn android.test.**