bill-jtrammell/py-adbkit
GitHub: bill-jtrammell/py-adbkit
py-adbkit 是一个 Python ADB 自动化工具包,将 Android 设备控制、应用管理、文件传输、日志采集等操作封装为可编程的 API,方便开发者用脚本完成设备自动化任务。
Stars: 0 | Forks: 0
# py-adbkit
面向 Android 的 Python ADB 自动化工具包。控制设备、运行 shell 命令、管理应用、截屏、流式传输 logcat,并自动化渗透测试工作流。
## 安装
```
pip install py-adbkit
```
## 快速开始
```
from pyadbkit import ADB
adb = ADB()
# 列出设备
devices = adb.devices()
for dev in devices:
print(f"{dev.serial} - {dev.model} (Android {dev.android_version})")
# 通过 WiFi 连接
adb.connect("192.168.1.100")
# Shell 命令
code, stdout, stderr = adb.shell("DEVICE_SERIAL", "ls -la /sdcard/")
# 截取屏幕截图
screenshot = adb.screenshot("DEVICE_SERIAL")
with open("screenshot.png", "wb") as f:
f.write(screenshot)
# 电池信息
battery = adb.battery("DEVICE_SERIAL")
print(f"Battery: {battery.get('level', '?')}%")
```
## Shell 自动化
```
from pyadbkit import ADB
adb = ADB()
serial = adb.devices()[0].serial
# 高级 Shell 接口
from pyadbkit.commands import Shell
sh = Shell(adb, serial)
# 获取/设置属性
android_ver = sh.getprop("ro.build.version.release")
# 设置
sh.settings_put("system", "screen_off_timeout", "600000")
# 启动 activities
sh.am_start("com.android.settings/.Settings")
# 输入自动化
sh.input_tap(500, 500)
sh.input_swipe(100, 500, 900, 500, 300)
sh.input_text("hello world")
sh.input_keyevent(3) # HOME
# Root shell(如果已 root)
sh.su("cat /data/data/com.package/databases/app.db")
```
## 应用管理
```
# 列出已安装的应用包
packages = adb.packages(serial, third_party=True)
# 安装 APK
adb.install(serial, "app.apk", flags=["-r", "-g"])
# 卸载
adb.uninstall(serial, "com.package.name")
# 备份
adb.backup(serial, "backup.ab", packages=["com.package.name"])
```
## Logcat
```
from pyadbkit.commands import Logcat
logcat = Logcat(adb, serial)
# 导出所有日志
lines = logcat.dump(max_lines=500)
# 按 tag 过滤
errors = logcat.by_tag("ActivityManager", level="E")
# 仅崩溃日志
crashes = logcat.crash()
# 内核日志
kernel = logcat.kernel()
```
## 文件操作
```
from pyadbkit.commands import Push, Pull
# 推送文件
pusher = Push(adb, serial)
pusher.file("local.apk", "/sdcard/Download/")
# 推送整个目录
count = pusher.dir("./my_folder", "/sdcard/my_folder")
# 拉取文件
puller = Pull(adb, serial)
puller.file("/sdcard/Download/data.json", "./data.json")
# 拉取目录
count = puller.dir("/sdcard/Documents", "./backup_docs")
```
## 网络
```
# WiFi ADB
adb.tcpip(serial, port=5555)
adb.connect("192.168.1.100", port=5555)
# 端口转发
adb.forward(serial, local_port=8080, remote_port=8080)
# 反向转发
adb.reverse(serial, remote_port=9090, local_port=9090)
```
## 设备信息
```
# 完整的设备属性
dev = adb.get_device_props(serial)
print(f"Model: {dev.model}")
print(f"Android: {dev.android_version}")
print(f"Build: {dev.build_id}")
# 电池
battery = adb.battery(serial)
print(battery)
# 磁盘使用情况
mounts = adb.df(serial)
for m in mounts:
print(f"{m['mount']}: {m['used']}/{m['size']} ({m['use_pct']})")
# 正在运行的进程
processes = adb.process_list(serial)
```
## 环境要求
- Python >= 3.10
- 已安装 `adb` 和 `fastboot` 并添加到 PATH 中
- 目标设备已启用 USB 调试
## 使用场景
- **Root 自动化**:结合 [moto-root-2026](https://github.com/bill-jtrammell/moto-root-2026) 为完整的 root 工作流编写脚本
- **渗透测试**:自动化 Android 设备的信息侦察与数据提取
- **测试**:UI 自动化、应用测试、截屏捕获
- **取证**:提取应用数据、数据库以及设备日志
## 捐赠
如果它为您节省了时间:
- **PayPal**: bill.jtrammell@gmail.com
- **Cash App**: $slauter99
## 许可证
MIT
标签:ADB, Android, DSL, Python, 无后门, 移动端测试, 设备管理, 逆向工具