java - Android中的consumer-rules.pro和proguard-rules.pro有什么区别?
问题描述
我在 Android 中创建了一个模块以在我的主应用程序中使用,并且其中似乎有两个文件 consumer-rules.pro 和 proguard-rules.pro。
我想知道以下事情
- 即使模块没有指定任何规则,所有模块代码都会被主模块 pro-guard 规则的规则混淆吗?
- Android中的consumer-rules.pro和proguard-rules.pro有什么区别?
- 我应该在我的模块中启用 minifyEnabled 吗?
- 我注意到我可以在主模块中为我的模块添加 proguard 规则,那么这是否意味着模块中的 pro-guard 规则在主模块中被覆盖?
请指教。
解决方案
我会尝试回答每个问题,即使让我知道如果有什么没有意义!
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 方依赖项声明规则的地方(这被视为您的应用程序模块/主模块的传递依赖项)并且它不会被应用程序模块规则覆盖。
我希望这是有道理的!
推荐阅读
- android - 如何在 onClick 方法中设置案例以获取 RecyclerView 项目位置
- javascript - 如何导入依赖项的依赖项?
- laravel - 没有模型的 Laravel 数据透视表
- java - 在重试struts动作之前如何睡觉?
- symfony4 - '找不到错误命令“encore”。' 在 Symfony4 中运行 'yarn run encore' 时
- spring-integration - 了解默认队列通道/容量行为
- scala - AutoRefineV 没有从 Map 中获取显式推断?
- ruby - 如何在行尾使用分号修复 CSV 读取错误
- python - 每个具有不均匀行的 Pandas groupby 的平均重量?
- google-app-engine - 启动 PostgreSQL 实例时出现问题