【安卓之巅】如何混淆Activity等四大组件(非标题党非自动生成)
如果把默认打包好的release.apk拖入android studio,双击打开dex文件,可以看到里面的Activity、View、布局等等全部都有是原来取的名字,感觉底裤都不剩了,怎么办?公开的有以下两种方案:一、使用第三方加固服务缺点:1.性能贼低,包括启动慢和运行慢。启动慢大多是冷启动慢,最多也就多出1~2秒的样子,可以接受。但在有的设备上,加固后的Java层代码可有十倍性能损失(测试出
如果把默认打包好的release.apk拖入android studio,双击打开dex文件,可以看到里面的Activity、View、布局等等全部都有是原来取的名字,感觉底裤都不剩了,怎么办?公开的有以下两种方案:
一、使用第三方加固服务
缺点:1.性能贼低,包括启动慢和运行慢。启动慢大多是冷启动慢,最多也就多出1~2秒的样子,可以接受。但在有的设备上,加固后的Java层代码可有十倍性能损失(测试出来的数据,是真的十倍!),需在Java层开多线程、多任务的慎重使用。2.不开源,产品不受开发者本人控制,对于开发者来说就是个黑盒子。3.说不定哪天不给你免费用了。
二、饿了么Mess插件
Mess插件很有意思,Groovy写的Gradle插件,这还是我第一次接触到这个领域。Groovy基于Java,这种插件开发起来,Android Studio里面也是有语法提示的,不过gradle接口的文档不好找,特别是搜索引擎出来,4.0、3.5各个版本接口不一致、资料混乱,高版本还是kotlin写的,各种群魔乱舞。
原理是在编译过程中挂钩某些任务,从而在混淆前,修改临时文件中的混淆规则.txt等等,缺点是不支持新的gradle插件,已停止维护。
打破枷锁,返璞归真
以上均非良策,那我们就真的没有办法了么?其实办法很简单:直接shift+f6手动混淆不就成了?完全没有任何问题,就是有点费手。
重构?不就是批量替换么,用脚本也很容易解决。混淆后的类名、包名、文件名可以是随机的名字,也可以是各种摘要或Hash的组合(参考),
清单文件.xml用 org.jdom:jdom:2.0.2
解析,其余直接用正则表达式简单替换即可。替换完后,再打包Release,不就混淆了四大组件了吗!
可以在打包前将源代码、资源文件备份到zip压缩包(参考)。打包Release完成后,再手动删除“混淆”后的文件,将备份的内容解压回来。保险起见,建议提交本地的修改至.git文件夹,然后备份.git文件夹到其他硬盘、网盘,或直接上传github、gitee。
手动混淆大法好,将Java层拧成一股绳,啊纤绳荡悠悠。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)