Proguard - 也使用模块中的 proguard 文件

Posted

技术标签:

【中文标题】Proguard - 也使用模块中的 proguard 文件【英文标题】:Proguard - also use proguard files from modules 【发布时间】:2015-08-27 07:16:24 【问题描述】:

我的项目 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 文件?模块可以指定它的proguard规则并且项目可以继承它吗?

【问题讨论】:

【参考方案1】:

解决方案是将以下行添加到库build.gradleconsumerProguardFiles '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 

    ...

【讨论】:

【参考方案2】:

所以,主模块proguard 代码,喜欢这样:

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

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

【讨论】:

以上是关于Proguard - 也使用模块中的 proguard 文件的主要内容,如果未能解决你的问题,请参考以下文章

Java 混淆 - ProGuard/yGuard/其他? [关闭]

启用 PROGUARD - Xamarin.Android

Android之代码混淆

在 proguard 之后,点击在发布 apk 中不起作用

播放 2 scala 路由控制器字节码与所有其他字节码不同

使用 Ant 和 Proguard 编译 Android 应用程序的问题