批量從apk檔案中提取出so檔案,apk檔案提取so
應用情境在不解壓apk檔案夾的情況下批量的從apk檔案中提取出所有的so檔案。這樣你即不用使用apktool 這些工具令產生大量的中間檔案,或者將apk的尾碼變為.zip,然後在解壓,節省了磁碟空間。
功能說明提取出一系列的apk檔案然後提取出它們中的所有so檔案,按照apk的名字以及它們之前所在的檔案夾進行儲存。如所示:
代碼實現
#!/usr/bin/env python# coding=utf-8import zipfileimport ospath = "/home/chicho/test/test/"so_path="/home/chicho/test/test/so/"apklist=os.listdir(path)for APK in apklist: if APK.endswith(".zip"): portion = os.path.splitext(APK) apkname = portion[0] abs_so_path=os.path.join(so_path,apkname) #/so/apkname/ abs_zipAPK_path=os.path.join(path,APK) z = zipfile.ZipFile(abs_zipAPK_path,'r') solists=[] for filename in z.namelist(): if filename.endswith(".so"): sofileName = os.path.basename(filename) soSource = os.path.basename(os.path.dirname(filename)) ''' make a dir with the source(arm?mips) ''' storePath=os.path.join(abs_so_path,soSource) # e.g. /.../so/apkname/mips/ if not os.path.exists(storePath): os.makedirs(storePath) ''' copy the xxx.so file to the object path ''' newsofile=os.path.join(storePath,sofileName) f = open(newsofile,'w') f.write(z.read(filename))