这行代码定义了混淆规则由两部分构成:位于 SDK 的 tools/proguard/ 文件夹中的 proguard-android.txt 的内容以及默认放置于模块根目录的 proguard-rules.pro 的内容。前者是 SDK 提供的默认混淆文件,后者是开发者自定义混淆规则的地方。
常见的混淆指令
=======
-
optimizationpasses
-
dontoptimize
-
dontusemixedcaseclassnames
-
dontskipnonpubliclibraryclasses
-
dontpreverify
-
dontwarn
-
verbose
-
optimizations
-
keep
-
keepnames
-
keepclassmembers
-
keepclassmembernames
-
keepclasseswithmembers
-
keepclasseswithmembernames
更多详细的请到官网
需要特别介绍的是与保持相关元素不参与混淆的规则相关的几种命令:
| 命令 | 作用 |
| — | — |
| -keep | 防止类和成员被移除或者被重命名 |
| -keepnames | 防止类和成员被重命名 |
| -keepclassmembers | 防止成员被移除或者被重命名 |
| -keepnames | 防止成员被重命名 |
| -keepclasseswithmembers | 防止拥有该成员的类和成员被移除或者被重命名 |
| -keepclasseswithmembernames | 防止拥有该成员的类和成员被重命名 |
保持元素不参与混淆的规则
[保持命令] [类] {
[成员]
}
“类”代表类相关的限定条件,它将最终定位到某些符合该限定条件的类。它的内容可以使用:
-
具体的类
-
访问修饰符(public、protected、private)
-
通配符*,匹配任意长度字符,但不含包名分隔符(.)
-
通配符**,匹配任意长度字符,并且包含包名分隔符(.)
-
extends,即可以指定类的基类
-
implement,匹配实现了某接口的类
-
$,内部类
“成员”代表类成员相关的限定条件,它将最终定位到某些符合该限定条件的类成员。它的内容可以使用:
-
匹配所有构造器
-
匹配所有域
-
匹配所有方法
-
通配符*,匹配任意长度字符,但不含包名分
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
隔符(.)
-
通配符**,匹配任意长度字符,并且包含包名分隔符(.)
-
通配符***,匹配任意参数类型
-
…,匹配任意长度的任意类型参数。比如void test(…)就能匹配任意 void test(String a) 或者是 void test(int a, String b) 这些方法。
-
访问修饰符(public、protected、private)</