批量从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))
时间: 2024-10-11 23:13:54

批量从apk文件中提取出so文件的相关文章

批量提取出apk文件中的classes.dex文件

应用场景 如果需要批量分析apk以及每个apk文件中的classes.dex 文件.怎么提取出它们?将apk改后缀名变为.zip文件,之后在解压,提取出每个apk文件中的classes.dex文件,这是一个可行的方案.但是中间解压大量的apk文件会占据我们的大量磁盘存储空间,怎么在不解压文件的情况下提取出dex文件?在这里使用python自带的zipfile类,可以轻松的解决这个问题. 代码实现: #!/usr/bin/env python # coding=utf-8 ''' @author

(转) 从ffmpeg中提取出YUV数据

有时需要从ffmpeg中提取出YUV数据用作预览,另存什么的. ffmpeg是先解码成YUV, 再以这个YUV作为输入进行编码,所以YUV数据有两种:  解码后的YUV数据, 以及  编码重建的YUV数据.下面分别讲两个YUV数据从哪儿?以及如何取? 1. 解码后的YUV数据在ffmpeg/libavcodec/utils_codec.c的avcodec_decode_video2() 函数中: avcodec_decode_video2(...){  ...   ret = avctx->co

从一段文字中提取出uri信息

package handle.groupby; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer

c中头文件在cpp文件中引用和.h文件引用的思考

我们在编写程序中头文件是经常使用的.但是头文件是应该包含在.H文件中还是在.cpp文件中.在这个当中有什么样去区别呢.  假如说我们编写了一个a.cpp  .我们将a.cpp文件的变量和函数申明在a.h中.在a.h文件有使用了b.中定义的类型type1数据m_type,同样b.cpp的头文件一些变量也声明在b.h中.此时我们当然可以在a.cpp中包含b.h 也可以在a.h中.这样都是可行的,因为我们编译的时候会会将b.h包含进来.而.h文件是不参与编译的.然后我们继续深入.假如我们将b.h文件定

【Eclipse】根据文件名查找文件与根据文件中的字符串查找文件

在大型项目开发中,你经常需要在Eclipse左方那庞大的文件树中寻找你需要的文件. 此时,你直接使用Ctrl+Shift+R就可以唤出文件查找窗口.这是根据文件名来找文件,如下图,只要输入你需要寻找的文件名,就能得到相应的寻找结果. 如果你需要根据文件中的字符串查找文件,那么,你可以通过Ctrl+H唤出查找与替换的窗口,切换到File Search选项卡中.输入你要搜索的字符串,与此字符串可能存在的文件后缀名,如果不记得输入*.*,输入文件后缀的原因是为了减少Eclipse的搜索量,加快搜索速度

在Ant Build文件中使用正则表达式替换文件内容

这需要在build文件中使用<replaceregexp>标签, 这个标签的使用大概是这个样子的: 1 <replaceregexp file="${src}/build.properties" 2 match="OldProperty=(.*)" 3 replace="NewProperty=\1" 4 byline="true" 5 /> 注意,Ant默认是不认识这个标签的,为了使用这个标签,需要在

如何从代码中提取出SQL用于调试?

这个SQL稍微有点复杂,未截图部分大概还有200多行,之前的同事没有写在一行,想要直接贴在SQL编译器里直接运行有点困难. 1,’将包含代码的SQL复制到文本记事本里. 2,将SQL括号左边的内容替换成空的. 3,将SQL右边的括号替换成空的 4,将SQL复制到https://tool.lu/sql/    进行SQL美化 5,将所有的参数进行设置,同样在记事本中替换成可以测试的参数. 之后就可以复制到编译器里执行和分析了. 原文地址:https://www.cnblogs.com/CryOnM

Eclipse:xml文件中添加.xsd约束文件

今天在使用dubbo的时候,XML文件一直报错.找不到dubbo的xsd约束文件. cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element   'dubbo:reference' 解决方法: 找到dubbo的jar包,然后在META-INF目录下面,找到dubbo.xsd文件. 然后在eclipse中window--> preferences

MyEclipse中的jsp文件中引入外部js文件时,乱码问题的解决

在myEclipse中右击js文件选择最下面的Properties选项,将Other修改为jsp文件的编码格式就可以了, 我的是UTF-8,只要修改完就没有问题了.