纯浏览器解析 APK 信息,不用服务器 | 开源了一个小工具

纯浏览器解析 APK 信息,不用服务器 | 开源了一个小工具

做内部分发平台的时候遇到一个需求:用户上传 APK 后,自动填写包名、版本号、应用名称。

最直接的方案是丢给后端解析,但能不能直接在浏览器里搞定呢?折腾了一番,写了个零依赖(对服务端零依赖)的小包:apk-meta-parser

能解析什么

javascript 复制代码
import { parseApkMeta } from "apk-meta-parser";

const meta = await parseApkMeta(file); // file 就是 input[type=file] 拿到的 File 对象
// {
//   packageName:      "com.example.app",
//   versionName:      "1.2.3",
//   versionCode:      123,
//   label:            "我的应用",   // 真实应用名,不是包名
//   labelIsResourceId: false,
//   apkSize:          10485760,
//   apkMd5:           "d41d8cd98f00b204e9800998ecf8427e"
// }

三行代码,搞定。

技术上做了什么

APK 本质是个 ZIP,里面的 AndroidManifest.xml 是 Android 二进制 XML 格式(不是普通文本),不能直接读。我手写了一个 AXML 解析器,支持 UTF-8/UTF-16 字符串池,处理了 versionCode 超 32 位的边界情况。

比较麻烦的一个坑是 应用名称 。用 uni-app、HBuilderX 打包的 APK,android:label 不是明文字符串,而是一个资源 ID(比如 @0x7f0d001b),真正的名字存在 resources.arsc 里。为了解析这个,又手写了一套 resources.arscResTable_type 块解析逻辑,能正确拿到中文应用名。

安装

复制代码
npm install apk-meta-parser jszip spark-md5

jszipspark-md5 是 peer deps,按需安装(只需要包名版本不计算 MD5 的话可以跳过 spark-md5 用 skipMd5: true)。

使用场景

  • APK 分发平台(上传自动识别)
  • 移动端 CI/CD 面板
  • 任何需要在前端展示 APK 元信息的地方

GitHub:github.com/xuantiandao...

小工具,代码量不大,欢迎看源码提 issue。


相关推荐
Xp021911031 分钟前
知网研学、万方、WPS、大以论文四大排版工具横评,新用户免费排版等你领!
前端·css·html·生活·wps·论文排版
全栈技术负责人2 分钟前
老项目新需求AI前端开发指南
前端·ai编程
周凡12311 分钟前
AI 时代的 Web JavaScript 逆向分析实践与思考
前端·javascript·人工智能
jerryinwuhan17 分钟前
marker BiBERTo解释
java·前端·人工智能
zhoumeina9925 分钟前
分段创建产品,tab 页切换又要保留缓存
前端·javascript
SilentSamsara26 分钟前
命令行工具开发:Click/Typer + 打包为独立二进制
linux·服务器·开发语言·前端·python·青少年编程·fastapi
恋猫de小郭29 分钟前
能在手机本地跑的图像生成模型 Bonsai Image ,效果还不错
前端·aigc·ai编程
Bigger30 分钟前
实战:搭建 AI Code Review 自动化流水线
前端·ci/cd·自动化运维
IT_陈寒36 分钟前
被Vite的HMR坑惨了,原来这样配置才能用对!
前端·人工智能·后端
怕浪猫42 分钟前
Electron 开发实战(七):网络通信与 API 集成全解
前端·javascript·electron