如何在不同的产品风味或不同的构建类型中使用不同的Proguard文件?

8

我需要为测试库制作不同的版本。为什么呢?因为我希望项目始终保持完全安全,所以我想启用缩小功能(即使是调试构建类型)。

在编写测试时,我使用了来自项目的不同类,因此我决定使用不同的口味更改proguard文件。大致如下:

android {
    ...
    buildTypes {
        release {
            minifyEnabled true
            testProguardFile 'test-proguard-rules.pro'
        }
        debug {
            minifyEnabled true
            testProguardFile 'test-proguard-rules.pro'
        }
    }
    ...
    productFlavors{
        forTest{
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules1.pro', 'debug-rules.pro'
        }
        forRelease{
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'debug-rules.pro'
        }
   }
}

同时,proguard-rules*文件

proguard-rules:

-dontwarn blablabla.**
-dontwarn blabla.**
-keep class bla.** { *; }

Proguard规则1:

-dontshrink
-dontobfuscate
-dontwarn

但是这对我并没有帮助。我想运行没有混淆的测试。Flavors没有像minifyEnabled这样的参数,因此我尝试寻找任何解决方案。那么,有关解决问题的建议吗?也许有人遇到过同样的问题,并找到了另一种解决方案(不使用flavors)?
1个回答

16

我在整整一天的折腾中找到了以下有效方法:

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

productFlavors {
    flavorA {
        applicationIdSuffix ".a"
        proguardFile 'flavorA_rules.pro'
    }
    flavorB {
        applicationIdSuffix ".b"
    }

}

更多信息:包含额外配置


2
那么 flavorA_rules.pro 会替换 flavorA 上的 proguard-rules.pro 吗? - TooCool
@Cool 是的,你可以稍后在 good-trainer-android/<module>/build/intermediates/aapt_proguard_file/<flavor name> 中验证生成的 Proguard 文件。 - FabioR
1
@TooCool 实际上,正如文档所述,不会有任何替换。该版本现在使用了所有三个提供的ProGuard规则。 - mohammad zarei matin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接