一个纯 Python 实现的 APK 解析与设备操控工具箱

一个纯 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 工具要么臃肿要么停更,要么解析核心依赖一堆第三方库。

所以我给自己写了这个工具,动手前定了三个原则:

  1. 核心解析零第三方依赖 。APK 里的 AndroidManifest.xml 是 AXML 二进制格式,应用名在 resources.arsc 里,签名证书要解 DER 和 APK Signing Block------这些格式都是公开文档,手写解析前期慢,换来的是没有版本地狱、任何字段想要就有、出 bug 全栈可查。
  2. 一套代码,四种用法。同一段核心逻辑被四个载体共用:主控台(Web UI)、右键菜单、双击安装的控制台窗口、命令行。用户爱用哪个用哪个。
  3. 只做本地工具,不做公网部署。核心能力靠 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 开发

相关推荐
itmigrate1 小时前
PHP 导出大 CSV 时内存溢出的一次排查
android·开发语言·php
hai_android1 小时前
LiveEventBusCore 跨 Activity 通讯源码解析
android·kotlin·android jetpack
维克兜率天2 小时前
【维克】统计套利建模:从因子到信号的完整流程
android·开发语言·python·算法·kotlin
hunterandroid2 小时前
Room 数据库迁移与多表关联查询实战
android
吐了啊取名字太难2 小时前
Android 相机 USB 连接别写在 Activity 里:锁屏、切页和后台传输怎么设计?
android·数码相机
hunterandroid2 小时前
Android ViewModel + LiveData 工程实践:配置变更、一次性事件与状态恢复
android
2501_915921433 小时前
iOS应用从开发到上架App Store的完整步骤详解
android·ios·小程序·https·uni-app·iphone·webview
HackTwoHub4 小时前
免 Root 安卓渗透工具 Stryker|把 Kali 装进手机!随身无线渗透工作站,内置 Nmap/Nuclei/Metasploit 全套武器库
android·linux·运维·人工智能·web安全·macos·智能手机