前面自动化打包资源混淆集成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应用程序资源的编译和打包过程分析

自动化打包资源混淆集成python实践----资源混淆的更多相关文章

  1. 自动化打包资源混淆集成python实践----打包

    1.自动化打包方案 1)友盟多渠道多渠道打包 2)gradle productFlavors系统的条件编译 3)美团打包 4)APK文件注释写入渠道号 2.各打包方案简介 1)友盟多渠道多渠道打包(w ...

  2. 自动化打包 Jenkins 持续集成 Git Gradle MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. 基于Armitage的MSF自动化集成攻击实践

    基于Armitage的MSF自动化集成攻击实践 目录 0x01 实践环境 0x02 预备知识 0x03 Armitage基础配置 0x04 Nmap:Armitage下信息搜集与漏洞扫描 0x05 A ...

  4. python进阶资源

    本文为不同阶段的Python学习者从不同角度量身定制了49个学习资源. 初学者 Welcome to Python.org https://www.python.org/ 官方Python站点提供了一 ...

  5. 优秀Python学习资源收集汇总(强烈推荐)

    Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...

  6. [转]优秀Python学习资源收集汇总

    Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...

  7. 关于在打包Jar文件时遇到的资源路径问题(二)

    在关于<关于在打包Jar文件时遇到的资源路径问题(一)>中,以及描述了当资源与可执行JAr分离时的资源路径代码的编写问题,后来想了想,为什么将<Java核心技术卷一>中的程序1 ...

  8. 关于在打包Jar文件时遇到的资源路径问题(一)

    当我们将程序写好,并进行打包成Jar文件时,通常都带有各种资源,这些资源可以是图像或者声音文件,也可以是别的如文本文件或二进制文件等,这些资源都和代码密切相关.例如在一个JPanel类上显示一些可能变 ...

  9. 优秀Python学习资源

    优秀Python学习资源收集汇总(强烈推荐)   Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮 ...

随机推荐

  1. js中的点击事件(click)的实现方式

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  2. C# Winform中窗体的美化—— 用IrisSkin轻松实现换肤功能

    今天经前辈提醒才知道winform窗体还有美化工具,呵呵,不得不说,孤陋寡闻了.下面总结一下irisskin2的使用步骤和遇到的问题及解决办法. 1.网址:http://www.pc6.com/sof ...

  3. FastAdmin 推荐 Git 在线学习教程

    FastAdmin 推荐 Git 在线学习教程 因为 FastAdmin 推荐使用 Git 管理代码,有很多小伙伴对 Git 不是很熟悉. 也苦于找不到好的教程,我就分享一个 Git 在线学习教程. ...

  4. BZOJ4303:数列

    浅谈\(K-D\) \(Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline ...

  5. HTTP-Runoob:HTTP请求头信息

    ylbtech-HTTP-Runoob:HTTP请求头信息 1.返回顶部 1. HTTP 响应头信息 HTTP请求头提供了关于请求,响应或者其他的发送实体的信息. 在本章节中我们将具体来介绍HTTP响 ...

  6. JAVA生成Word文档(经过测试)

    首先告诉大家这篇文章的原始出处:http://www.havenliu.com/java/514.html/comment-page-1#comment-756 我也是根据他所描述完成的,但是有一些地 ...

  7. c# 几种singleton 实现

    http://csharpindepth.com/Articles/General/Singleton.aspx#introduction 4th在线看 https://www.manning.com ...

  8. 【转】rails中的时区问题

    http://eric-gao.iteye.com/blog/1058197 解释4个时区设置的不同: config.active_record.default_timezoneconfig.time ...

  9. appium运行时启动失败

    1.检查服务是否开启 2.简单Android设备是否连接成功 3.检查4723端口是否被占用: netstat -ano|findstr '4723' 查到被占用后,找到pid,进入任务管理器查看该p ...

  10. ASP.NET 页面生命中的关键事件的执行顺序

    表 1:ASP.NET 页面生命中的关键事件 阶段 页面事件 可覆盖的方法 页面初始化 Init   加载视图状态   LoadViewState 处理回发数据   任意实现 IPostBackDat ...