Android代码混淆方法,Android Framework 代码的混淆

因项目需要把 Android Framework 自主开发部分的代码进行代码混淆,首先的工具是 PROGUARD。但是 PROGUARD 更多是用于 APK 的代码混淆。网络上还没有看到对 Framework 代码混淆的案列。

网上找不到方法,只好自己动手了。研究了两天,终于实现了 Framework 层的代码混淆。

1.修改 Android.mk

代码放在 framework/base 目录下,编译生成 framework.jar,其实这不是一个很好的做法,因为与 Android 源生的代码混合在一起,造成低耦合。前期考虑不当了,后期维护就相对麻烦。

最关键的一点,修改 Android.mk, 使需要混淆部分的包和类单独编译。因为 framework 其他代码最好不要混淆,以免引起找不到类的出错提示。

然后设置 LOCAL_PROGUARD_ENABLED := nosystem,很重要,不然类的方法不会混淆成abcd类似的名称。

然后指定 proguard.flag,设定不混淆(保留)对外公开接口的类,重新编译。可以用模块编译 mmm 命令提高编译效率。

2.检查 proguard_dictionary

首先 mmm 编译后,会提示生成 proguard.classes.jar,这个时候 proguard 其实已经生效。但是我们还是要看一下实际的效果,jar 生成目录会生成一个 proguard_dictionary(.out/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/proguard_dictionary),这个文件记录了混淆是如何生效的。例如:

float mCurrentX -> h

float mCurrentY -> i

3.反编译检查最终效果

.out/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/ 目录下,

classes.jar 是没有混淆前的包,而 javalib.jar 是混淆后的包,用 jd-gui 查看混淆的效果是否满意。

而更重要的是反编译查看 ./out/target/product/rk3288/system/framework/framework.jar, 因为这个是最终打包到系统里面去的。

如图,这个是我最终混淆后的结果:

dbfd0b142cedc65ddd6334fd405d8cda.png

4. 更新系统,检查效果

将生成的新的 framework.jar push 到平板,调用相关接口,看功能是否正常。如果不小心混淆了外部需要调用的接口,logcat 可以看到提示找不到类,那就会引起异常了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值