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


猜你喜欢

转载自blog.csdn.net/xiaobeizi1/article/details/79891878