323 字
2 分钟
零依赖 Python Web 服务:APK 改包工具的后端是这样写的

为什么零依赖#

APK 改包工具要跑在客户服务器上,环境越简单越可靠。web_server.py(800+ 行)只用标准库:http.serverThreadingHTTPServer 做并发,threading + uuid 管任务,subprocess 调改包脚本——不装 Flask/Django,拷过去就能跑

任务模型:提交即返回,轮询查进度#

改包动辄几分钟,不能让 HTTP 请求一直挂着。我的设计:

POST /api/jobs -> { job_id } # 秒回
GET /api/jobs/:id -> { status, log } # 前端轮询

任务状态机:queued → running → done/failed,日志实时追加,前端页面能看到 apktool 每一行输出,出错直接定位。

过期清理:磁盘不会被撑爆#

JOB_RETENTION_SECONDS = int(os.environ.get("JOB_RETENTION_HOURS", "24")) * 3600

每个 job 带时间戳,后台线程定期扫 web_jobs/,超 24 小时自动删。APK 动辄几百 MB(MAX_UPLOAD_MB=800),没有这套机制,跑一周磁盘就满了。

前端:单文件内嵌页面#

INDEX_HTML 直接嵌在 Python 文件里:上传表单、固定 APK 下拉框、进度条、日志框一次给全。无构建步骤,改个文案保存即生效,交付给客户时少一个构建环节就少一分风险。

我的后端习惯:并发用线程池、任务可追踪、磁盘有上限。下篇聊真正的硬核部分——apktool 改包签名链路。