安卓系统中consumer-rules.pro和proguard-rules.pro之间有什么区别



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

我想知道以下事情

  1. 所有模块代码都会被主要模块的规则弄糊涂吗即使模块没有指定任何规则
  2. 安卓系统中consumer-rules.pro和proguard-rules.pro之间有什么区别
  3. 我应该在模块中启用minimyEnabled吗
  4. 我注意到我可以在主模块中为我的模块添加proguard规则,这意味着模块中的pro-guard规则在主模块中被覆盖

请告知。

我会尽力回答每个问题,但如果有什么问题没有意义,请告诉我!

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

困惑不是那样的。当您在应用程序模块中启用minifyEnabled属性时,它会试图混淆应用程序模块的可用代码及其第三方依赖项,您的库模块将被视为第三方deps但它不涉及第三方依赖的任何传递依赖


2.安卓系统中consumer-rules.pro和proguard-rules.pro之间有什么区别

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

使用者规则.pro是一个文件,您可以在其中声明使用者(将您的模块/库用作依赖项的人,通常是库开发人员(可以应用于模块的规则


3。我应该在模块中启用minimyEnabled吗

我建议您执行(每个开发人员都应该在发布的APKs上(,但要确保一切都按预期工作,因为底层的classes.dex在应用minifyEnabled后会发生更改。它有助于减少输出APK大小,优化代码,模糊类文件,等等。。。


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

不,库规则基本上是从库模块本身的使用者规则文件中应用的,因此当您在应用程序模块中为库声明这些规则时,它的应用方式与

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


我希望这是有道理的!

如果您正在开发库/模块,则可以使用consumer-rules.pro将规则提交给库的使用者。一个例子是,我创建了一个包含Moshi+改装并启用全模式R8的通用模块。我需要添加某些规则,使其在使用者的项目中工作,我可以将该任务留给使用者,也可以将其放在库的consumer-rules.pro中,以确保我的库的每个使用或所有使用者在使用/使用我的库时都不必担心在其项目中添加这样的规则。

最新更新