这两天研究了一下androguard,根据项目实际情况写了这个脚本,apk包解压和归类的功能脚本完成了,后面加入历史版本资源对比的功能,作为Jenkins中作为CI的一项,

#!/usr/bin/env python

# -*- coding: utf-8 -*- 
import os,sys,time,shutil,zipfile
from os.path import getsize


filename_apk = sys.argv[1]  #要解压的文件,将apk拖入命令行,如: #./unzipapk.py  DiDi_one_driver_d_build_166.apk
print(filename_apk)
filename =os.path.splitext(filename_apk)[0]+'.zip'
shutil.copyfile(filename_apk,filename)
filedir = 'data2/'  #解压后放入的目录
currentDir = os.getcwd()
resultDir = os.path.join(currentDir, filedir)
r = zipfile.is_zipfile(filename)


if r:
    starttime = time.time()
    fz = zipfile.ZipFile(filename,'r')


    src_picture = 'src_picture'                         #新建存储图片资源的文件夹
    new_dir_pic = os.path.join(currentDir, src_picture)
    os.makedirs(new_dir_pic) 


    src_audio = 'src_audio'                         #新建存储音频资源的文件夹
    new_dir_audio = os.path.join(currentDir, src_audio)
    os.makedirs(new_dir_audio) 


    src_so = 'src_so'                         #新建存储os文件的文件夹
    new_dir_so = os.path.join(currentDir, src_so)
    os.makedirs(new_dir_so) 
                          
    for file in fz.namelist():                          #开始遍历
        fz.extract(file,resultDir)
        var = os.path.splitext(file)[1]  #获取file文件的后缀名
        if var=='.png' or var=='.PNG' or var=='.jpg'or var=='.JPG'or var=='.gif'or var=='.GIF':   #图片文件
            file_absolute_path = os.path.join(resultDir, file)  #file解压到解压目录后的绝对路径
            file_size = getsize(file_absolute_path)      #file文件的大小
          #  print('Picture Resources:')
          #  print(file_absolute_path)
            fz.extract(file,new_dir_pic)           #图片资源单独存储在src_picture文件夹
        elif var=='.m4a' or var=='.wav' or var=='.mid'or var=='.ogg'or var=='.mp3'or var=='.mp4':   #音频文件
           file_absolute_path = os.path.join(resultDir, file)  #file解压到解压目录后的绝对路径
           file_size = getsize(file_absolute_path)      #file文件的大小
           fz.extract(file,new_dir_audio)           #图片资源单独存储在src_audio文件夹


        elif var=='.so':   #库文件
           file_absolute_path = os.path.join(resultDir, file)  #file解压到解压目录后的绝对路径
           file_size = getsize(file_absolute_path)      #file文件的大小
           fz.extract(file,new_dir_so)           #图片资源单独存储在src_os文件夹


    endtime = time.time()
    times = endtime - starttime
    print('###unzip and classification with',times,'s###')        
    print('###unzip success!###')
    os.remove(filename)


else:
    print('This file is not zip file')
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐