我试图构建一个包含La
带有proguard 的库模块的应用程序,我注意到该库没有被混淆.试图理解为什么.在这个时刻,这是我的buildType:
release { minifyEnabled false useProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' }
经过一些搜索后,我遇到了ConsumerProguardFiles函数,该函数指出:
ProGuard规则文件将包含在已发布的AAR中.
然后,任何使用AAR的应用程序项目都会使用这些proguard规则文件(如果启用了ProGuard).
这允许AAR指定收缩或混淆排除规则.
这仅适用于Library项目.这在Application项目中被忽略.
现在buildType
,我的库La
中有以下内容:
release { minifyEnabled false useProguard true consumerProguardFiles 'proguard-rules.pro' }
现在我的库La
正在使用它的proguard规则,库代码被混淆了.
所以我的问题是:
1)这种不同行为的原因是什么.为什么ProguardFiles不会混淆库的规则,而是忽略它?
2)我猜测ConsumerProguardFiles所做的是将库的规则与主应用程序proguard规则合并.这个假设是否正确?
3)简而言之:对应用程序使用proguardFiles,对库使用ConsumerProguardFiles.正确?
感谢您抽出宝贵的时间阅读!
据我了解,这minifyEnabled false
意味着ProGuard 不会运行来缩小/混淆您的库模块.这是您想要的,因为库模块无法知道它将在您的应用程序模块中使用哪些部分.
相反,库模块必须向app模块提供其相关的proguard规则(通过consumerProguardFiles
),然后app模块将运行ProGuard,同时具有自己的规则和库的规则,以最小化最终的应用程序APK.