首页 > 代码库 > 批量从apk文件中提取出so文件

批量从apk文件中提取出so文件

应用场景

在不解压apk文件夹的情况下批量的从apk文件中提取出所有的so文件。这样你即不用使用apktool 这些工具令产生大量的中间文件,或者将apk的后缀变为.zip,然后在解压,节省了磁盘空间。




功能说明

提取出一系列的apk文件然后提取出它们中的所有so文件,按照apk的名字以及它们之前所在的文件夹进行存储。如下图所示:

技术分享



代码实现

#!/usr/bin/env python
# coding=utf-8
import zipfile
import os

path = "/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))







































批量从apk文件中提取出so文件