如何在我的Android库(AAR)中包含proguard配置

Per*_*den 24 android proguard gradle aar

根据AAR文件规范,Android库包含'proguard.txt'文件.我的理解是这个文件声明了如何正确地对库进行模糊处理和缩小.在我的情况下,我需要保留一些API类.

如何在库的build.gradle中声明库的proguard.txt文件?在创建使用我的库的应用程序(APK)时,是否会自动读取此文件?

我没有在Android的Gradle Plugin用户指南中找到此信息.

小智 44

在Gradle文件的默认配置闭包中,指定您的Proguard文件consumerProguardFiles而不是proguardFiles.例如:

defaultConfig {
    consumerProguardFiles 'proguard.txt'
}
Run Code Online (Sandbox Code Playgroud)

  • `consumerProguardFiles`应该在`defaultConfig`而不是`buildTypes/release`中指定,这样如果消费应用程序在调试和释放模式下都进行调试(例如,为了避免65k dex方法限制),它就可以工作. (4认同)

yoA*_*ex5 5

ProGuard 人工制品

[ProGuard 工作流程]

人工制品没有缩小,消费者解决它

库是开源的,但作为库开发人员,您可以提供一个 ProGuard 文件,消费者(应用程序)按需求(minifyEnabled true消费者中)考虑该文件。consumerProguardFiles在你的图书馆build.gradle。它在人工制品中添加proguard.txt文件(与 相同.pro

例如,您的库是开源的,而应用程序开发人员想要缩小所有

android {
    defaultConfig {
        //consumerProguardFiles '<file_path>'
        consumerProguardFiles 'proguard-rules.pro'
    }

    buildTypes {
        release {
            minifyEnabled false
        }
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

人工制品被缩小

库是闭源的 - 您可以使用下一种可能性:

android {

    buildTypes {
        release {
            minifyEnabled true
            //proguardFiles project(':<project_name>').file('<file_path>')
            proguardFiles 'proguard-rules.pro'
        }
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

*请注意:

  • minifyEnabled true并且proguardFiles project两者都应该设置。
  • 如果您使用单个minifyEnabled true<file_path>错误 -classes.jar是空的。
  • 如果单一proguardFiles project- 没有效果

至于示例中的构建过程library - application- 所有.class文件将合并为带有.dex扩展名的单个存档