android自定义混淆包名
Android Proguard 如何混淆package name
一、如何指定某个包不被混淆
不被混淆的包下放一个指定不被混淆的class,这样该包名就不会被混淆
举例demo原有目录结构如下:
图1-1
指定MainActivity不被混淆
-keep public class * extends android.app.Activity # 保持哪些类不被混淆
-flattenpackagehierarchy 'yjrtest' #重新包装所有重命名的包并放在给定的单一包中
混淆后的目录结构如下:
图1-2
可以看出除了MainActivity所在的包没有被混淆之外其他的包名都被混淆了。
二、如何按照指定规则混淆包名
方法一、将所有混淆的类全部移动至一个指定的包名中
从图1-2中可以看出,混淆后的包统一放在指定的包名“yjrtest”下,但该包下仍有随机混淆的不受控制的包名a,b,c,d等,而我们要做的是要包名分配可控。
使用如下命令混淆:
-repackageclasses 'yjrtest' #将包里的类混淆成n个再重新打包到一个统一的package中 会覆盖flattenpackagehierarchy选项
混淆后的目录结构如下:
图2-1
可以看到除了不能混淆的包下的,其他的所有的混淆后的类都被放在了指定的统一目录“yjrtest”下
那如果我们想要包com.yjr.test.myapplication下的混淆文件也移动到指定包中,可在混淆配置文件中添加如下配置
-allowaccessmodification
混淆后目录结构如下:
图2-2
可以看到com.yjr.test.myapplication下的混淆文件a成功的被移动到了yjrtest下!
方法二、不改变混淆包的目录结构,至只修改包名称
使用混淆字典
1、混淆字典shakespeare.txt :
图2-3
2、在混淆配置文件中添加如下配置:
-packageobfuscationdictionary shakespeare.txt
混淆后目录结构如下:
图2-4