python adb 批量提取安卓设备apk文件

准备工作

  • adb工具包
  • python3

代码解释

该Python函数的作用是通过ADB(Android Debug Bridge)工具获取已安装在Android设备上的所有应用包名及其文件路径,并将这些应用的APK文件从设备拉取到本地指定目录进行保存。
首先,函数通过subprocess.run()方法执行adb shell pm list packages -f命令,获取已安装应用的包名及其文件路径信息,并将结果保存在result变量中。
然后,通过判断指定的本地目录(base_dir)是否存在,若不存在则创建该目录。
接着,对获取的应用包名及其文件路径信息进行遍历处理。对每条信息,通过字符串切割获取应用的包名和文件路径。
根据包名创建本地相应目录(若该目录不存在),然后通过os.system()方法执行adb pull命令,将应用文件从设备拉取到本地指定目录。

代码

import os
import subprocess

# 定义基础目录路径,用于存储从手机拉取的APK文件
base_dir = 'd:/androidApp/'
# 使用subprocess模块运行adb命令,列出所有安装的应用包信息
result = subprocess.run(['adb', 'shell', 'pm list packages -f'], stdout=subprocess.PIPE, text=True)

# 获取命令行输出的结果
lst = result.stdout
# 检查基础目录是否存在,如果不存在则创建
if not os.path.exists(base_dir):
    os.mkdir(base_dir)

# 遍历应用包信息,分离包名和路径,并下载到本地
for i in lst.split("\n"):
    package_com = i[8:]  # 提取包信息字符串,package:后面的内容
    spt = package_com.rfind("=")  # 查找等号的位置,以分割包路径和包名
    package_path = package_com[:spt]  # 提取包的路径
    package_name = package_com[spt + 1:]  # 提取包的名称
    target_path = os.path.join(base_dir, package_name)  # 计算目标存储路径
    if not os.path.exists(target_path):
        os.mkdir(target_path)  # 如果目标路径不存在,则创建
    # 使用adb pull命令将应用从设备上拉取到本地指定路径
    os.system("adb pull " + package_path + " " + target_path)

image.png

结语

本篇文章主要是记录一下临时用到的脚本,并没有对其进行更深层次的测试,并且只是adb命令的使用,没啥技术含量,各位看官看看就好,有需要自拿。

评论 0

还没有评论,来说点什么吧。

提交后需要审核才会公开。