【问题标题】:proguard gradle debug build but not the testsproguard gradle debug build 但不是测试
【发布时间】:2014-02-23 03:29:22
【问题描述】:

我为调试构建启用了 proguard:

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

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

【问题讨论】:

    标签: android gradle instrumentation


    【解决方案1】:

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

    【讨论】:

    • 我如何设置多个 proguard 文件进行测试?
    • 使用小写字母和复数形式的文件?
    • 对我来说,我需要添加testproguardFiles(<test file name>),并且在那个文件中我有标志-dontshrink
    【解决方案2】:

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

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

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

    android {
        testBuildType 'debugTest'
    }
    

    【讨论】:

    • 次要注意:gradle nowdays(检查为 2.6)使用 minifyEnabled false 而不是 runProguard false
    • @AndreyStarodubtsev 谢谢,我已经调整了答案。
    【解决方案3】:

    gradle.projectsEvaluated {
        proguardDebugTest.enabled = false
    }
    

    在你的构建脚本中。

    这里有两件事要知道:

    编辑:

    一个小提示:它会禁用任务但构建失败。这是因为 :preDexDebugTest 任务不会在 proguard 开启的情况下运行。到目前为止,我发现的最佳解决方案是调试特定的 proguard 配置。更多详情here。创建一个单独的 proguard 配置文件,包括常规的 proguard 文件,如下所示:

    -include proguard.cfg
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2018-12-16
      • 2013-09-20
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多