参见Proguard官网的介绍:
https://www.guardsquare.com/manual/configuration/examples
Obfuscating package names
Package names can be obfuscated in various ways, with increasing levels of obfuscation and compactness.
例如,混淆前的包结构:
mycompany.myapplication.MyMain
mycompany.myapplication.Foo
mycompany.myapplication.Bar
mycompany.myapplication.extra.FirstExtra
mycompany.myapplication.extra.SecondExtra
mycompany.util.FirstUtil
mycompany.util.SecondUtil
假设mycompany.myapplication.MyMain类不被混淆(is kept by the configuration)并且所有其他类均被混淆,
则,混淆后,mycompany.myapplication.MyMain类不被混淆,且mycompany.myapplication.MyMain类所在的包不被混淆:
mycompany.myapplication.MyMain
mycompany.myapplication.a
mycompany.myapplication.b
mycompany.myapplication.a.a
mycompany.myapplication.a.b
mycompany.a.a
mycompany.a.b
-flattenpackagehierarchy 选项,通过对包层次结构的扁平化处理,进一步实现混淆。
相关选项:
-flattenpackagehierarchy 'myobfuscated'
被flatten之后的包结构如下:
mycompany.myapplication.MyMain
mycompany.myapplication.a
mycompany.myapplication.b
myobfuscated.a.a
myobfuscated.a.b
myobfuscated.b.a
myobfuscated.b.b
也就是mycompany.myapplication包依然不被混淆,但是mycompany.myapplication.a包被myobfuscated.a替代,mycompany.a包被myobfuscated.b替代。