(译)混淆器生效的规则来源

本文对混淆器所生效的四个规则来源进行了介绍。

本文首发:https://yuweiguocn.github.io/

《赠幼骐伯约》
文能提笔安天下,武能上马定乾坤。
心存谋略何人胜,古今英雄唯是君!
-三国,诸葛亮

原文链接:Feeding ProGuard’s inputs: where are all of these rules coming from?

当android应用开启混淆后,混淆使用的规则不仅仅是你指定添加的,还有来自其它资源的规则。下面介绍的四个规则来源需要注意。

开发者显式添加的规则

这个是你在build.gradle文件中使用proguardFile指定在一个文件中添加的规则。如果你使用混淆,你可能习惯在这添加配置规则。

默认混淆文件

一个以广泛适用的规则集合通过getDefaultProguardFile添加,你可以在build.gradle模板文件中看到。它保护了一些像Parcelables,View的getters 和 setters(用于开启View属性动画)和所有添加了@Keep注解的东西。你可以看下这个文件默认添加的混淆规则。当你尝试写混淆规则时这也是很好的示例规则源码。

AAPT生成的规则

当AAPT处理应用的资源,它生成规则用于保护例如:从布局文件引用的View类和清单文件中引用的Activity。每个规则都有一条或多条注释用于说明类在哪被引用,如果需要的话你可以追踪到对应的资源。你可以在这儿找到这些规则:

build/intermediates/proguard-rules/{buildType}/aapt_rules.txt.

注意这个资源不是显式添加在build.gradle文件,Android gradle插件会负责引入这些规则。

类库的规则

如果应用依赖的类库有混淆配置并且包含在类库中,应用会使用这些混淆配置,类库可以在build.gradle文件中声明这些规则使用consumerProguardFile。例如,这是Butterknife的build.gradle片段。

合并

不用去追踪添加到应用的混淆规则的每个来源,你可以查看所有的配置。你可以在你的规则文件指定

-printconfiguration proguard-config.txt

混淆器会输出所有配置规则到指定的文件。注意它不会按照原有指定的顺序,因此可能比较难理解特定的规则来自哪。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容