在Android中,consumer-rules.pro 和 proguard-rules.pro 有什么区别?

2022-09-01 05:54:42

我已经在Android中创建了一个模块以在我的主应用程序中使用,并且似乎有两个 consumer-rules.pro 和 proguard-rules.pro。

我想知道那些愚蠢的事情

  1. 即使模块没有指定任何规则,所有模块代码是否会被主模块规则-保护规则的规则所混淆?
  2. 在Android中,consumer-rules.pro 和 proguard-rules.pro 有什么区别?
  3. 我应该在我的模块中启用minifyEnabled吗?
  4. 我注意到我可以在主模块中为我的模块添加护卫规则,那么这是否意味着模块中的护卫规则在主模块中被覆盖?

请指教。


答案 1

我会尝试回答每个问题,即使让我知道,如果某些事情没有意义!

1. 即使模块没有指定任何规则,所有模块代码都会被主模块规则和防护规则的规则混淆吗?

混淆不是这样工作的。当您在应用程序模块中启用minify属性时,它会尝试混淆应用程序模块中可用的代码以及它的第三方依赖项,并且您的库模块将被视为第三方设备。在这里,但它不涉及您的第三方依赖项的任何传递依赖项


2. android中的 consumer-rules.pro 和 proguard-rules.pro 有什么区别?

proguard-rules.pro 是你声明规则的文件,与你的模块及其依赖项的proguard相关。

consumer-rules.pro 是一个文件,您可以在其中声明可以从使用者(无论谁将你的模块/库用作依赖项,通常由库开发人员使用)应用于你的模块。


3. 我应该在我的模块中启用minifyEnabled吗?

我建议你应该(每个开发人员都必须在发布apk上做),但要确保一切都按预期工作,因为底层class.dex在应用minify后会发生变化。它有助于减少输出apk大小,优化代码,混淆类文件等等...


4.我注意到我可以在主模块中为我的模块添加proguard规则,那么这是否意味着模块中的pro-guard规则在主模块中被覆盖?

不,基本上库规则是从库模块本身的消费者规则文件中应用的,所以当你在应用程序模块中为库声明这些规则时,它的应用方式与消费者规则相同,这基本上表明消费者在缩小时应该使用这些规则。

proguard-rules.pro 库是你为库的第三方依赖项声明规则的地方(这被认为是你的应用程序模块/主模块的传递依赖项),并且它不会被应用程序模块规则覆盖。


我希望这是有道理的!


答案 2

推荐