Gradle - 继承了proguard配置吗?

时间:2016-07-21 11:46:57

标签: android gradle proguard

这可能过于宽泛,但我想解释如何在项目及其依赖项之间传递Proguard和缩小配置,以了解这些操作在项目的依赖树中的深度。

我在`{mododule'的build.gradle

buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        }
dependencies {
    compile project(':someothermodule')
    compile 'some.maven.central.library'
}

通过配置,似乎很清楚themodule中的类将被缩小和混淆,但someothermodule的类会发生什么?他们也会被缩小和混淆吗?即使someothermoduleminifyEnabled true

如果'someothermodule'只是一个.jar依赖项,会发生什么?

some.maven.central.library的配置会怎样?

是否正在构建模块的Proguard配置级联到其依赖关系,或者每个配置都遵循自己的规则?

2 个答案:

答案 0 :(得分:3)

如果模块本身被模糊处理(consumerProguardFiles 'proguard-rules.pro' ),则使用模块(在您的情况下是应用程序)不会自动继承使用的配置。

Android gradle插件中有一种启用此功能的机制:

proguard-rules.pro

.aar中包含的规则将自动包含在应用程序项目中,并与其他配置文件合并。

这仅适用于Android库项目(.jar)。例如,如果您对maven central上的-keep文件具有依赖性,则不会有这样的使用者规则,您必须自己将所需的配置添加到应用程序项目中。

请记住,模糊模块的配置和使用应用程序/模块使用的配置不需要相同。在大多数情况下,消费者规则只是一组applicationContext.xml规则。

答案 1 :(得分:2)

从技术上讲,它是以下内容:

  

图书馆项目本身不运行ProGuard,因此他们不使用   任何配置。

     

应用程序项目会混淆整个代码库,包括任何代码库   引用库,所以他们需要适当的配置   应用程序代码和库代码。

我有一个小案例,我有一个Facebook库作为gradle依赖项,因为我们使用minifyEnabled:true混淆代码,我们必须使用常规keep命令来保持所有代码不被混淆,例如:

-keep class com.facebook.** { *; }

此外,关于.jar混淆,您可以查看this other post

此致