前面自动化打包资源混淆集成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. GO语言list剖析

    GO语言list剖析 本节内容 使用方法 list提供的方法 源码剖析 1. 使用方法 在GO语言的标准库中,提供了一个container包,这个包中提供了三种数据类型,就是heap,list和rin ...

  2. 自动化框架httpClient实例

    package com.auto.test.util; import java.net.SocketException;import java.net.SocketTimeoutException;i ...

  3. Genymotion的使用 -- A Faster Android Emulator

    Genymotion 安装与配置 1,Genymotion 模拟器 EditText获取焦点时不自动弹出软件盘 选择该模拟器的设置--> 选中Use Virtual keyboard for t ...

  4. RabbitMQ入门Demo

    之前环境安装已经介绍过了,下面直接跑个Demo. 1.添加Maven依赖 <dependency> <groupId>org.springframework.amqp</ ...

  5. python 编码拓展,小数据池,

    编码拓展: 1.在所有类型的编码中,编码的二进制互不识别, 2.在传输的过程中不能是万国码的二进制解码传输, 因此将unicode变为utf - 8或者变成gbk编码尤为重要; 利用encode编码为 ...

  6. mysql之 percona-xtrabackup 2.4.7安装(热备工具)

    准备:os是centos6.7,提前下载并上传 percona-xtrabackup 安装包,下载网址为: https://www.percona.com/downloads/XtraBackup/L ...

  7. BZOJ2002:[HNOI2010]弹飞绵羊

    浅谈分块:https://www.cnblogs.com/AKMer/p/10369816.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...

  8. 【转】hurry_liu 大神STM32移植contiki入门之一:系统介绍和开发环境搭建

    前言: 由于项目的原因,需要在LPC1788(STM32 cortex-M3)上面跑contiki. 之前没有涉及到contiki,不知其为何物.不过这个不是难事,做IT的,每每遇到新事物,都不会处理 ...

  9. Python 中的0 和 1 的意思

    Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false,所以Python中的 1 代表 True,0代表False

  10. java代码,用continue写出偶数

    总结:不满足条件时,输出当前==== package com.b; import java.util.Scanner; //用continue写出偶数的代码是: public class twe { ...