前面自动化打包资源混淆集成python实践----打包一文讲述了四种打包方案,以及美团打包方案、apk注释添加渠道号方案的实现。这里讲集成资源混淆。

1、资源混淆带来的好处

1)对资源文件起一定的保护作用,使其不能知其名不知意(如login.png ----a.png> )

2)对压缩apk包大小,起一定的作用(混淆资源ID长度,对apk进行深度压缩)

2.方案种类

1)美团资源混淆

原理:干涉appt过程,改写appt 源码,在生成resources.arsc和*.ap_时把资源文件的名称进行替换

2)微信资源混淆

原理:对apk 中的resources.arsc进行内容修改,同时对apk进行深度压缩。

3.Python 集成微信资源混淆

1)思路:gradle 打包 ---->微信资源打包 --->多渠道打包

2)python实现

(1)使用微信资源混淆方法

法1:定义gradle andResGuard  task, ./gradlew andresguard 

法2:直接用命令行执行  java -jar resourceproguard.jar input.apk -7zip /shwenzhang/tool/7za -zipalign /shwenzhang/sdk/tools/zipalign

ps:这里使用法2使用混淆

(2)源码:

def func_andResGuard(apkPath,isChannels = False):
#根据AndResGuard-cli-1.1.0.jar,config.xml 实际路径替换
guardJarFile = workSpace + '/AndResGuard/AndResGuard-cli-1.1.0.jar'
guardConfigFile = workSpace + '/AndResGuard/config.xml' outDir = workSpace + '/AndResGuard/build'
cmd = 'java -jar ' + guardJarFile + ' '+apkPath + ' -config ' + guardConfigFile + ' -out '+ outDir +' -zipalign ' + zipalignFile
proc = subprocess.Popen(cmd,shell = True)
if isChannels:
func_listen_process(proc,AndResGuardProcessListener(apkPath,True))
else:
func_listen_process(proc,AndResGuardProcessListener(apkPath)) #andResGuard进程监听器
class AndResGuardProcessListener(ProcessListener):
curTime = 0
isChannels = False
apkPath = ''
preApkSize = 0 def __init__(self,apkPath,isChannels = False):
self.isChannels = isChannels
self.apkPath = apkPath
def start(self):
size =os.path.getsize(self.apkPath)
self.preApkSize = size /float(1024)/1024 self.curTime = time.time()
print '\n ------> AndResGuard start \n'
def doing(self):
return
def end(self):
time.sleep(30)
files = os.listdir(workSpace + '/AndResGuard/build')
for f in files :
if 'signed_7zip_aligned' in f:
size = os.path.getsize(workSpace + '/AndResGuard/build/' + f)
print '\n ------> AndResGuard before apk size : ' + str(float('%0.2f'%(self.preApkSize))) + 'M\n'
size = size /float(1024)/1024
print '\n ------> AndResGuard after apk size : ' + str(float('%0.2f'%size)) + 'M\n'
os.chmod( self.apkPath, stat.S_IWRITE )
os.remove(self.apkPath)
shutil.copyfile(workSpace + '/AndResGuard/build/' + f,self.apkPath)
break
else :
print ''
self.curTime = time.time() - self.curTime - 10
print '\n ------> AndResGuard end , cost time '+ str(int(self.curTime)) +'s\n\n' if self.isChannels:
func_channelsReleasePack(workSpace)

4、混淆压缩效果:

ps:使用友盟分享功能时,需要在config.xml添加资源白名单(友盟根据资源名获取资源ID,而资源名被混淆了,导致资源找不到),填写正确的签名信息(否则微信分享调用 不起来)。

github:github:AndroidPackCi

参考资料:

美团Android资源混淆保护实践

安装包立减1M--微信Android资源混淆打包工具

https://github.com/shwenzhang/AndResGuard

Android应用程序资源的编译和打包过程分析

最新文章

  1. POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法
  2. placehoder不兼容ie9以下和opero12以下
  3. showModalDialog 的重要提示
  4. python核心编程学习记录之条件和循环
  5. hdu 4107
  6. 测试管理_测试人员招聘[持续更新ing]
  7. linux 命令(1)screen
  8. Struts2返回JSON对象的方法总结
  9. Qt5 程序发布打包
  10. 编码问题导致样式显示在IE中不正常
  11. 找出诡异的Bug:数据怎么存不进去
  12. 基于visual Studio2013解决C语言竞赛题之1077大数相加
  13. Misha and Palindrome Degree
  14. requirejs 一个拆分js项目的类库
  15. HTML5学习笔记<四>: 列表, 块和布局
  16. 【开发技术】java中代码检查checkStyle结果分析
  17. 【leetcode75】Intersection of Two Arrays(数组的交集)
  18. Including R code in perl
  19. Android为TV端助力 doc里面adb连接出现问题的解决方法
  20. 移动端Tap与滑屏实战技巧总结以及Vue混合开发自定义指令

热门文章

  1. 团队队列(列和map结合的经典运用)
  2. 检测硬件的批处理命令,检测硬件bat,一键获取电脑硬件信息
  3. H5移动端下html上传图片被旋转问题
  4. 洛谷【AT2827】LIS
  5. BZOJ4154:[IPSC2015]Generating Synergy
  6. POJ3258(最大化最小值)
  7. Order By操作
  8. 机器学习:模型泛化(LASSO 回归)
  9. Hybrid App混合模式移动应用开发(AngularJS+Cordova+Ionic)
  10. c语言-单链表(二)