同时学python和java混淆_自动化打包资源混淆集成python实践----资源混淆

前面自动化打包资源混淆集成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)ifisChannels:

func_listen_process(proc,AndResGuardProcessListener(apkPath,True))else:

func_listen_process(proc,AndResGuardProcessListener(apkPath))#andResGuard进程监听器

classAndResGuardProcessListener(ProcessListener):

curTime=0

isChannels=False

apkPath= ''preApkSize=0def __init__(self,apkPath,isChannels =False):

self.isChannels=isChannels

self.apkPath=apkPathdefstart(self):

size=os.path.getsize(self.apkPath)

self.preApkSize= size /float(1024)/1024self.curTime=time.time()print '\n ------> AndResGuard start \n'

defdoing(self):return

defend(self):

time.sleep(30)

files= os.listdir(workSpace + '/AndResGuard/build')for f infiles :if 'signed_7zip_aligned' inf:

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'

ifself.isChannels:

func_channelsReleasePack(workSpace)

4、混淆压缩效果:

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

github:github:AndroidPackCi

参考资料:

你可能感兴趣的:(同时学python和java混淆_自动化打包资源混淆集成python实践----资源混淆)