ConsumerProguardFiles vs ProguardFiles

Ped*_*dro 21 android android-gradle-plugin android-proguard

我试图构建一个包含La带有proguard 的库模块的应用程序,我注意到该库没有被混淆.试图理解为什么.在这个时刻,这是我的buildType:

release {
 minifyEnabled false
 useProguard true
 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} 
Run Code Online (Sandbox Code Playgroud)

经过一些搜索后,我遇到了ConsumerProguardFiles函数,该函数指出:

ProGuard规则文件将包含在已发布的AAR中.

然后,任何使用AAR的应用程序项目都会使用这些proguard规则文件(如果启用了ProGuard).

这允许AAR指定收缩或混淆排除规则.

这仅适用于Library项目.这在Application项目中被忽略.

现在buildType,我的库La中有以下内容:

release {
 minifyEnabled false
 useProguard true
 consumerProguardFiles 'proguard-rules.pro'
}
Run Code Online (Sandbox Code Playgroud)

现在我的库La正在使用它的proguard规则,库代码被混淆了.

所以我的问题是:

1)这种不同行为的原因是什么.为什么ProguardFiles不会混淆库的规则,而是忽略它?

2)我猜测ConsumerProguardFiles所做的是将库的规则与主应用程序proguard规则合并.这个假设是否正确?

3)简而言之:对应用程序使用proguardFiles,对库使用ConsumerProguardFiles.正确?

感谢您抽出宝贵的时间阅读!

Fab*_*tel 13

据我了解,这minifyEnabled false意味着ProGuard 不会运行来缩小/混淆您的库模块.这是您想要的,因为库模块无法知道它将在您的应用程序模块中使用哪些部分.

相反,库模块必须向app模块提供其相关的proguard规则(通过consumerProguardFiles),然后app模块将运行ProGuard,同时具有自己的规则和库的规则,以最小化最终的应用程序APK.

  • 有没有办法从consumerProguardFiles覆盖或替换proguard (3认同)
  • 如果我有一个 lib 模块,是否必须向两个文件(proguard-rules 和consumer-rules)添加规则,或者仅将 lib 规则添加到“consumer-rules.pro”就足够了? (2认同)
  • @ASP 将您的规则添加到“consumer-rules.pro”就足够了。会自动应用到App中 (2认同)