如何在我的Android库(AAR)中包含proguard配置
根据,Android库包含一个“proguard.txt”文件。 我的理解是,该文件声明了如何正确地对库进行模糊处理和缩小。在我的例子中,我需要保留一些API类 如何在库的build.gradle中声明库的proguard.txt文件?在创建使用我的库的应用程序(APK)时,是否会自动读取此文件如何在我的Android库(AAR)中包含proguard配置,android,gradle,proguard,aar,Android,Gradle,Proguard,Aar,根据,Android库包含一个“proguard.txt”文件。 我的理解是,该文件声明了如何正确地对库进行模糊处理和缩小。在我的例子中,我需要保留一些API类 如何在库的build.gradle中声明库的proguard.txt文件?在创建使用我的库的应用程序(APK)时,是否会自动读取此文件 我在Android的Gradle插件用户指南中没有找到此信息。在Gradle文件的默认配置闭包中,使用consumerProguardFiles而不是proguardFiles指定Proguard文件。
我在Android的Gradle插件用户指南中没有找到此信息。在Gradle文件的默认配置闭包中,使用
consumerProguardFiles
而不是proguardFiles
指定Proguard文件。例如:
defaultConfig {
consumerProguardFiles 'proguard.txt'
}
ProGuard人工制品 人工制品未缩小,消费者解决它
库是开源的,但作为库开发人员,您可以提供一个ProGuard文件,消费者(应用程序)将根据需要考虑该文件(
minifyEnabled true
in consumer)consumerProguardFiles
在您的库中build.gradle
。它在人工制品中添加proguard.txt
文件(与.pro
相同)
例如,您的库是开源的,而应用程序开发人员希望缩小所有的库
android {
defaultConfig {
//consumerProguardFiles '<file_path>'
consumerProguardFiles 'proguard-rules.pro'
}
buildTypes {
release {
minifyEnabled false
}
}
//...
}
android{
默认配置{
//consumerProguardFiles“”
ConsumerProGuard文件的proguard规则.pro'
}
建筑类型{
释放{
minifyEnabled false
}
}
//...
}
人工制品缩小了
库是封闭源代码-您可以使用下一种可能性:
android {
buildTypes {
release {
minifyEnabled true
//proguardFiles project(':<project_name>').file('<file_path>')
proguardFiles 'proguard-rules.pro'
}
}
//...
}
android{
建筑类型{
释放{
minifyEnabled true
//proguardFiles项目(':')。文件(“”)
proguard文件的proguard rules.pro'
}
}
//...
}
*请注意:
和minifyEnabled true
都应设置proguardFiles项目
- 如果使用单
或minifyEnabled true
是错误的-
是空的类。jar
- 如果单个
-无效proguardFiles项目
至于
库-应用程序
-示例上的构建过程,所有.class
文件将合并为具有.dex
扩展名的单个存档,这似乎是@kevinpelgrims的副本。这是关于为外部库用户分发带有嵌入式proguard配置的AAR文件,我不希望答案是相同的,即库类不会在多模块构建中缩小两次。问题是相似的。consumerProguardFiles
应该在defaultConfig
中指定,而不是buildTypes/release
中指定,这样当消费应用程序在调试和发布模式下进行升级时(例如,为了避免65k dex方法限制)。如果您使用的是gradle实验插件(0.7.2)它导致了这个错误:原因:org.gradle.api.internal.ExtensibleDynamicObject.build.gradle的一个很好的例子是在这个链接中:“创建库”和“将库作为存档分发”是什么意思?我猜当创建一个库时,它将被用作其他库或应用程序中的依赖项。在这种情况下,它不应该总是minifyEnabled false,因为这里的“library”模块不知道其他lib/应用程序将引用什么函数,并且很难确定收缩/混淆什么?@lannyf,我已经更新了我的答案