Android Gradle插件:productFlavors中的runProguard?

时间:2014-08-27 11:04:10

标签: android gradle proguard

我有一个Android库项目和一个使用该库项目的应用程序。在app的build.gradle文件中,我让ProGuard模糊整个应用程序,包括库项目代码:

//from the app project
buildTypes{
    release {
        runProguard true
        proguardFile 'proguard-project.txt'
    }
    debug{
        runProguard false
    }
}

一切正常,lib项目和app项目都被混淆得很好。 但是,我想构建我的lib项目" standalone ",所以我可以在没有app项目的情况下分发它。这当然意味着自己对lib项目进行模糊处理。

我无法通过使用lib-projects buildTypes中的build.gradle代码并简单地运行proGuard来实现这一点,因为这会破坏app-project构建,因为构建应用程序会编译其代码再次使用已经混淆的lib-project代码......: - )

如果我在" standalone"中构建lib-project,我需要运行ProGuard 的可能性。模式,例如通过传递参数或执行特殊任务。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

自己解决了。在lib-project的构建文件中,我有两个构建类型,我将它们都发布:

publishNonDefault true

和构建类型:

buildTypes {
    debug {
        debuggable true
        runProguard false
    }

    release {
        runProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'

    }

}

这会导致创建debugrelease APK。在我的app项目的构建文件中,我通过声明依赖关系为debug configuration添加显式依赖项,如下所示:

dependencies{
    compile project(path: ':FancyLibProject', configuration: 'debug')
    //...
}

当然在app-project中我还有两种构建类型debug和release,它们以与lib-project相同的方式调用ProGuard。
注意:我省略了发布版本的签名配置 - 如果没有那些APK将无法安装!