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

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

本文首发: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

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

你可能感兴趣的:((译)混淆器生效的规则来源)