我尝试构建一个包含La
库模块的应用程序,并使用proguard进行混淆,但我注意到该库没有被混淆。我试图弄清楚原因。此时,我的buildType如下:
release {
minifyEnabled false
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
在一些搜索后,我发现了ConsumerProguardFiles函数,它说明:
用于包含在发布的AAR中的ProGuard规则文件。
这些ProGuard规则文件将被任何使用AAR的应用程序项目使用(如果启用了ProGuard)。
这允许AAR指定缩小或混淆排除规则。
这仅适用于库项目。在应用程序项目中将被忽略。
有了这个,我的库La的buildType
如下:
release {
minifyEnabled false
useProguard true
consumerProguardFiles 'proguard-rules.pro'
}
现在我的库La
正在使用它自己的proguard规则,库代码已被混淆。
因此,我的问题是:
1)这种不同行为的原因是什么?为什么ProguardFiles不混淆库中的proguarded规则,而是忽略它?
2)我猜ConsumerProguardFiles所做的是将库的规则与主应用程序的proguard规则合并。我的假设正确吗?
3)简而言之:应用程序使用proguardFiles,库使用ConsumerProguardFiles。正确吗?
感谢您阅读!
useProguard true
的目的是什么? - AutonomousAppsuseProguard true
。我只是添加它来查看通过显式或隐式方式是否会有任何差异(实际上并没有)。但您可以在 https://developer.android.com/studio/build/shrink-code.html 查看更详细的响应,在“使用即时运行启用代码缩减”下面。 - Peddro