python批量验证apk渠道包脚本
2016-03-09 11:12
791 查看
上一篇是通过zipfile解压apk文件,批量提取文件夹里面所有apk的图标,本想着如果manifest文件直接提取出来就可以直接验证渠道包了,明显想多了。所以换着另一个方法提取,需要用到apktool.jar反编译apk,达到目的。
传送上一篇批量提取icon的脚本:我是任意门
原理:
传入一个文件夹路径,通过os模块遍历出文件夹下所有apk,然后为每一个apk开启一个反编译的线程,通过调用shell命令apktool反编译apk,然后re匹配渠道包,放入一个list中。最后,递归延迟检查如果apk数量和渠道号数量相同,那么程序结束,打印出所有渠道号。
ps:apktool和.py文件要在同一个目录下
后续能改进的地方:
可以把已有的渠道号保存到一个txt文件或者xls文件,然后apk提取出每一个渠道号之后和文件遍历比较,存在于列表就验证通过,如此最后结果可以再最后输出一个结论,这样测试直接看结果就行啦。
源码:http://download.csdn.net/detail/cloud_huan/9456296
最后的截图
传送上一篇批量提取icon的脚本:我是任意门
原理:
传入一个文件夹路径,通过os模块遍历出文件夹下所有apk,然后为每一个apk开启一个反编译的线程,通过调用shell命令apktool反编译apk,然后re匹配渠道包,放入一个list中。最后,递归延迟检查如果apk数量和渠道号数量相同,那么程序结束,打印出所有渠道号。
ps:apktool和.py文件要在同一个目录下
后续能改进的地方:
可以把已有的渠道号保存到一个txt文件或者xls文件,然后apk提取出每一个渠道号之后和文件遍历比较,存在于列表就验证通过,如此最后结果可以再最后输出一个结论,这样测试直接看结果就行啦。
#!/usr/bin/env python #_*_ coding:utf-8 _*_ ''' 作者:cloudhuan blog:http://blog.csdn.net/cloud_huan ''' import os,sys,re import thread,threading import shutil import time ######################################################################## class CheckChannel(): """""" #---------------------------------------------------------------------- list_channel = [] def __init__(self,apkDir = '/home/cloudhuan/桌面/tmp'): """Constructor""" self.apkDir = apkDir def check(self): self.listDir = os.listdir(self.apkDir) for apk in self.listDir: CheckThread(apk, self.apkDir,self.list_channel).start() self.pp() def pp(self): if len(self.list_channel) == len(self.listDir): print "渠道号共有这么多个:",len(self.list_channel) for i in self.list_channel: print i else: time.sleep(5) self.pp() ######################################################################## class CheckThread(threading.Thread): """""" #---------------------------------------------------------------------- def __init__(self,apk,apkDir,list_channel): """Constructor""" threading.Thread.__init__(self) self.apk = apk self.apkDir = apkDir self.list_channel = list_channel def run(self): apk_name = os.path.splitext(self.apk)[0] apk_in_path = os.path.join(self.apkDir,self.apk) apk_out_path = os.path.join(self.apkDir,apk_name) cmd = 'java -jar apktool.jar d -f -s %s %s'%(apk_in_path,apk_out_path) os.popen(cmd) manifest_path = os.path.join(apk_out_path,'AndroidManifest.xml') if manifest_path == None: raise IOError with open(manifest_path,'r') as f: m_result = f.read() #re正则匹配的渠道key,不同apk可能不一样,这里是InstallChannel,有的是umeng_channel pattern = re.compile(r'<meta-data android:name="%s" android:value="(\w+)"'%'InstallChannel') self.list_channel.append(pattern.findall(m_result)[0]) shutil.rmtree(apk_out_path) if __name__ == '__main__': #实例化CheckChannel对象传入路径,默认是我的测试路径,如CheckChannel('c:/user/cloudhuan/test') CheckChannel().check()
源码:http://download.csdn.net/detail/cloud_huan/9456296
最后的截图
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- 突击部队拼多多
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例