1、因为开启混淆后,默认混淆项目下的所有代码,所以混淆指定的包名、类名、方法名转变成保留指定的包名、类名、方法名,为什么这样设计?可能,考虑到保留的类总是比混淆的类少很多很多吧!如果你想深入了解混淆的基础知识,可以参考SDK工具集混淆文档:sdk\tools\proguard\docs\index.html,你会发现,广义的混淆,包括代码压缩、代码优化和代码混淆,而本文所说的仅指代码混淆,广义的混淆,如下图:

2、默认混淆项目下的包名、类名、方法名。如果阅读文档比较吃力,没有关系,可以继续往下看,TeachCourse将文档涉及部分知识盼内溲铫点以例子的方式进行演示。在上面创建的module项目中,新建一个类User类,并添加对应的属性、方法,项目结构如下图:

3、User的代码结构如下图:

4、因为开启混淆后,默认混淆项目下的所有代码,新建的User类、User类方法名和User类包名都会被混淆,因此我们不需要在proguard-rules.pro添加任何规则,签名打包apk文件,进行反编译后查看源码,项目结构如下图:

5、保留指定的包名。在User包名下新建City类,该类包含latitude、longitude、cityName三个属性,代码如下:

6、保留City的包名,在proguard-rules.pro文件添加如下规则:

7、反编译签名打包的apk,项目结构如下图:

8、保留指定的类名。在保留包名的前提下,继续保留City类名,在proguard-rules.pro文件添加如下规则:

9、反编译签名打包的apk,项目结构如下图:

10、打开这时候的City,各个方法名已被混淆,如下图:

11、保留指定的方法名。在保留包名、类名的前提下,继续保留City指定的方法,比如:保留所有的get方法,在proguard-rules.pro文件添加如下规则:

12、反编译签名打包的apk,项目结构如下图:

13、到此,完成了混淆指定包名、类名和方法名部分的学习,虽然不算全面的,但对于理解混淆的过程还是比较有帮助的。