首页 > 解决方案 > Android中的consumer-rules.pro和proguard-rules.pro有什么区别?

问题描述

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

我想知道以下事情

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

请指教。

标签: javaandroidkotlinproguard

解决方案


我会尝试回答每个问题,即使让我知道如果有什么没有意义!

1 、即使模块没有指定任何规则,是否所有模块代码都会被主模块pro-guard规则的规则混淆?

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


2 、Android中consumer-rules.pro和proguard-rules.pro有什么区别?

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

consumer-rules.pro是您声明可以从消费者(将您的模块/库用作依赖项,通常由库开发人员使用的人)应用于您的模块的规则的文件。


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

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


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

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

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


我希望这是有道理的!


推荐阅读