python示例apk_python批量验证apk渠道包脚本

传入一个文件夹路径,通过os模块遍历出文件夹下所有apk,然后为每一个apk开启一个反编译的线程,通过调用shell命令apktool反编译apk,然后re匹配渠道包,放入一个list中。最后,递归延迟检查如果apk数量和渠道号数量相同,那么程序结束,打印出所有渠道号。

ps:apktool和.py文件要在同一个目录下

#_*_ 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'

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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值