Proguard - 也使用来自模块的混淆文件

Proguard - also use proguard files from modules

我的项目 build.gradle 如下所示:

android { 
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "..."
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile project(':androKnife')
}

我的 androKnife 模块有它自己的 proguard 文件。如何让我的主项目也使用这个文件?

如果我编译一个项目,有什么方法可以自动合并所有模块的所有proguard 文件吗?是否有另一种方法可以让模块指定它的混淆规则并且项目可以继承它?

解决方案是向库 build.gradle 添加以下行:consumerProguardFiles 'proguard-rules.pro'

所以我的 androKnife 库如下所示:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            consumerProguardFiles 'proguard-rules.pro'
        }
    }
}

dependencies {

    ...
}

因此,主模块 proguard 代码如下:

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

谁知道proguardFiles的内在关系原理?当具有相同的 proguard 代码时自动合并或覆盖?