如何在我的 Android 库 (AAR) 中包含 proguard 配置
Posted
技术标签:
【中文标题】如何在我的 Android 库 (AAR) 中包含 proguard 配置【英文标题】:How to include a proguard configuration in my Android library (AAR) 【发布时间】:2015-07-23 22:47:30 【问题描述】:根据AAR file spec,android 库包含一个“proguard.txt”文件。 我的理解是这个文件声明了如何正确地混淆和缩小库。就我而言,我需要保留一些 API 类。
如何在库的 build.gradle 中声明库的 proguard.txt 文件?创建使用我的库的应用程序 (APK) 时会自动读取此文件吗?
我没有在 Android 的 Gradle 插件用户指南中找到此信息。
【问题讨论】:
这似乎是***.com/questions/26983248/…的副本 @kevinpelgrims 这是关于为外部库用户分发带有嵌入式 proguard 配置的 AAR 文件,我不希望答案是相同的,即库类不会在多模块构建。不过问题是相似的。 【参考方案1】:在 Gradle 文件的默认配置闭包中,使用 consumerProguardFiles
而不是 proguardFiles
指定 Proguard 文件。例如:
defaultConfig
consumerProguardFiles 'proguard.txt'
【讨论】:
consumerProguardFiles
应该在defaultConfig
而不是buildTypes/release
中指定,以便在使用应用程序在调试和发布模式下进行保护时它可以工作(例如,避免65k dex 方法限制)。
如果您使用的是 gradle 实验插件(0.7.2),则会导致此错误:原因:org.gradle.api.internal.ExtensibleDynamicObject。
build.gradle 的好例子在这个链接中:github.com/artem-zinnatullin/RxJavaProGuardRules/blob/master/…【参考方案2】:
ProGuard 人工制品
[ProGuard workflow]
人工制品未缩小,消费者自行解决
库是开源的,但作为库开发人员,您可以提供一个 ProGuard 文件,消费者(应用程序)将根据需求(消费者中的minifyEnabled true
)考虑该文件。 consumerProguardFiles
在您的库中build.gradle
。它在人工制品中添加proguard.txt
文件(与.pro
相同)
例如,您的库是开源的,应用程序开发人员希望缩小所有内容
android
defaultConfig
//consumerProguardFiles '<file_path>'
consumerProguardFiles 'proguard-rules.pro'
buildTypes
release
minifyEnabled false
//...
人工制品被缩小
库是封闭源代码 - 您可以使用下一种可能性:
android
buildTypes
release
minifyEnabled true
//proguardFiles project(':<project_name>').file('<file_path>')
proguardFiles 'proguard-rules.pro'
//...
*请注意:
minifyEnabled true
和 proguardFiles project
都应该设置。
如果您使用单个 minifyEnabled true
或 <file_path>
是错误的 - classes.jar
是空的。
如果单个proguardFiles project
- 无效
关于library - application
示例的构建过程 - 所有.class
文件将合并到具有.dex
扩展名的单个存档中
【讨论】:
“创建库”和“将库作为存档分发”是什么意思?我想在创建库时,它打算用作其他库或应用程序中的依赖项。在那种情况下,它不应该总是 minifyEnabled false,因为这里的“库”模块不知道其他库/应用程序将引用什么函数,并且很难确定要缩小/混淆什么?以上是关于如何在我的 Android 库 (AAR) 中包含 proguard 配置的主要内容,如果未能解决你的问题,请参考以下文章
如何在Android库AAR中包含第三方JAR,而无需合并代码