纯浏览器解析 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。


相关推荐
用户11481867894842 小时前
Vosk-Browser 实现浏览器离线语音转文字
前端·javascript
江上清风山间明月2 小时前
Vite现代化的前端构建工具详解
前端·webpack·nodejs·vite
PBitW2 小时前
apijson 让前端自己定义接口 —— 但不推荐
前端·apijson
存在X2 小时前
前端自动化编译Jenkins
前端·github
军军君012 小时前
数字孪生监控大屏实战模板:云数据中心展示平台
前端·javascript·vue.js·typescript·前端框架·es6·echarts
吴声子夜歌2 小时前
Vue3——使用axios实现Ajax请求
前端·javascript·ajax·axios
qq4356947012 小时前
JavaWeb05
前端·html
@PHARAOH2 小时前
WHAT - W3C WCAG 2.1 AA 无障碍标准
前端
用户游民2 小时前
Android 项目aab包上传谷歌平台需支持16KB页面
前端