一个纯 Python 实现的 APK 解析与设备操控工具箱
一个 Android 开发者的自用工具:APK 解析 + 设备操控桌面工具箱,34 个能力。核心解析(AXML / resources.arsc / DER 证书 / APK 签名块)全是手写的,
pip install一个都不用装。源码:github.com/pilxz2014/a...
一、项目背景
Android 开发日常里有大量这种时刻:
- 拿到一个 APK,想知道包名、版本、minSdk、签了什么证书------开终端敲
aapt dump badging,或者找个在线网站把包传上去? - 测试同学问"这个包签名是不是和线上一致"------你得翻 keytool 命令
- 想把一个测试包塞进手机------还得开命令窗口、敲
adb install一长串路径 - 想看看某台测试机上装了什么、把某个 APK 从设备上抠出来
这些事单件都很小,但每次都要开终端、记命令、翻输出。市面上的 GUI 工具要么臃肿要么停更,要么解析核心依赖一堆第三方库。
所以我给自己写了这个工具,动手前定了三个原则:
- 核心解析零第三方依赖 。APK 里的
AndroidManifest.xml是 AXML 二进制格式,应用名在resources.arsc里,签名证书要解 DER 和 APK Signing Block------这些格式都是公开文档,手写解析前期慢,换来的是没有版本地狱、任何字段想要就有、出 bug 全栈可查。 - 一套代码,四种用法。同一段核心逻辑被四个载体共用:主控台(Web UI)、右键菜单、双击安装的控制台窗口、命令行。用户爱用哪个用哪个。
- 只做本地工具,不做公网部署。核心能力靠 adb、本机磁盘,云端没有手机,设备域全部失去意义;而且文件浏览、脚本执行这类能力上云等于把服务器 shell 交出去。
二、如何使用
启动
- 双击根目录
start.bat:会先停掉上一次的服务再启动,浏览器自动打开主控台;关掉窗口即停止 - 双击
stop.bat停止服务 - 主控台默认端口
5170,被占用会自动顺延;绑127.0.0.1,只在本机访问
四种用法
右键 :先注册菜单(只写 HKCU,不需要管理员):
bash
python apktool.py sys menu install # 注册,默认级联样式
python apktool.py sys menu status # 查看当前注册状态
python apktool.py sys menu uninstall # 移除菜单
注册后右键 .apk 就有「APK 工具」级联菜单:

菜单共 6 项:解析 APK 信息、安装到设备、提取图标、复制包名、与设备已装版本对比、打开主控台。如果个别系统上级联子菜单不展开,用 python apktool.py sys menu install --style flat 换成平铺样式(各项直接排在右键菜单里,一定能显示)。
双击 :双击 .apk 直接安装(第一次需要在"打开方式"里选一次本工具,不改默认程序)。弹出 cmd 窗口,先显示包的基本信息(包名/版本/大小/SDK/ABI),然后预检、安装,实时进度。版本比设备上低时会先问你一句再决定要不要 -d。
主控台(功能最全):把 APK 拖进浏览器页面、点「浏览...」弹原生文件框、或者直接粘路径,三种方式选一个文件就解析:
解析页顶部固定包名 + 版本,往下依次是基本信息(大小/ABI/Dex 数量/组件/权限)、签名(方案、标识、证书主体)、图标、权限明细,另有钱包检测、隐私描述、体积构成等专项页签。左侧按域分组,每个域的功能如下:
本机·APK(不用连设备)
- 解析 APK:就是上面截图这个页面,选一个 APK 出全部信息
- 双包对比:两个 APK 对着比(版本、签名、权限、体积差异),也支持"本机包 vs 设备上已装的包"
- 批量解析:选一个目录,把里面所有 APK 跑一遍,出汇总表
设备·应用(需要 adb)
- 应用列表:列出设备上所有应用(可按系统/三方过滤),带应用名搜索
- 应用详情 / 签名 :看某个已装应用的版本、路径、权限;签名是免 root 读的(拉回 base.apk 本地解析,或走 dumpsys 快路径),还能和本机 APK 比对是否同签名
- 导出 APK:把设备上的应用抠成本地 apk 文件
- 强停 / 清数据 / 卸载:常用运维动作,危险操作有二次确认
设备·启动器
- 组件列表:列出某应用的 Activity / Service / Receiver / Provider
- 启动组件 :图形化填参数(Extras / Action / Flags),实时预览
am start命令再执行,不用手拼命令行 - 发送广播 :同样图形化填参数发
am broadcast - 启动历史 / 我的入口:启动过的组件有记录,常用的可以收藏成一键入口
设备·运行时
- Activity 堆栈 :解析
dumpsys activity activities,按"屏幕 → 任务 → Activity"分层展示当前设备界面,一眼看出前台是哪个包的哪个页面
设备·捕获
- 屏幕捕获 / 录屏 :截图、
screenrecord录屏 - 实时镜像:调 scrcpy 投屏(需要本机装 scrcpy)
- 日志:logcat 实时流,关键词过滤,界面不卡
- 产物管理:截图、录屏文件统一看,可直接导出
设备·安装
- 安装:选 APK → 预检(minSdk / ABI / 签名 / 版本升降)→ 安装,实时进度百分比
- 失败诊断 :装失败了给
INSTALL_FAILED_*的中文解释和补救建议,不用再去搜
设备·文件
- 文件浏览:浏览设备目录(push / pull),拉回文件时弹系统目录选择框选保存位置
系统
- 菜单注入 :注册/移除
.apk右键菜单(就是前面说的「APK 工具」) - 环境自检:一键探测 adb / aapt2 / apksigner / scrcpy / keytool 在不在、版本对不对
- 设置:主控台端口、产物目录、自动打开浏览器等
- 脚本存档库:把常用的 bat / sh 脚本存进来,按文件夹分类,支持新建、编辑、备注、别名,点击直接运行(Windows 上跑 sh 靠 Git Bash,装了就能用)
命令行 :全部能力都有子命令,--json 输出是稳定契约(只增字段不改字段),可以接进 shell 脚本做断言。比如:
bash
python apktool.py apk info app.apk # 解析
python apktool.py device stack # 当前设备界面堆栈
python apktool.py sys doctor # 环境自检
环境依赖
工具本身只需要 Python 3.8+。adb 装了才能用设备域(应用/启动器/捕获/安装/文件),本机解析不受影响;aapt2 / apksigner / scrcpy 是可选增强,缺了只影响对应功能,界面会标出来并给下载指引。
三、打包
打包成绿色发行包发给别人用,不需要"部署":
bash
python package_win.py # 产出 dist/APKConsole-win.zip
- 用 PyInstaller onedir + windowed 模式(onefile 每次启动要解压,慢)
- 打完自动冒烟:探活服务端口、检查单例,断言产物完整性、双击自动开页面
- 产物是
APKConsole/目录:APKConsole.exe+_internal/+使用说明.txt(由docs/05-分发与使用说明.md复制生成,改说明只改那份 md)
接收方体验:解压后双击 exe,就有服务 + 托盘图标 + 自动打开的页面。不装 Python、不写注册表、不留开机自启,删掉目录就是卸载。
已知边界 :绿色包里没有 .apk 右键菜单和双击安装------那套依赖源码树里的脚本加注册表项。接收方解析、安装走主控台即可。macOS 用 package_mac.py,必须在 mac 上跑,不能交叉编译。
四、总结
回头想想,这个工具解决的就是一个问题:把平时那些繁琐操作归到一套图形界面里。查包名、看签名、装包、从设备上导 APK,这些事单独看都不难,麻烦在每次都要开终端、记命令、翻输出。现在右键一点、双击一下就能完成,命令不用记,也不怕敲错。
源码在 GitHub:github.com/pilxz2014/a...
标签:Android | Python | 效率工具 | Windows 开发