纯浏览器解析 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.arsc 的 ResTable_type 块解析逻辑,能正确拿到中文应用名。

安装

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

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

使用场景

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

GitHub:github.com/xuantiandao...

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


相关推荐
风骏时光牛马20 小时前
AI多模块协同自动化工作流
前端
zhangminghuan20 小时前
前端面试应对技巧
前端·面试·职场和发展
计算机魔术师20 小时前
潜伏14年的PHP致命洞,AI跑两天就交卷了
前端
IT_陈寒20 小时前
Vue的这个响应式陷阱我居然现在才发现
前端·人工智能·后端
Python自动化直播1 天前
智能脚本批量管理拆开看:导入、导出、重写、试听
前端·python·ai·秒播
开开心心就好1 天前
发票信息录入太麻烦?离线工具一键转表格
运维·服务器·前端·pdf·ocr·maven·intellij-idea
এ慕ོ冬℘゜1 天前
ES Promise.all/ Promise.race
前端·javascript·elasticsearch
喜欢打篮球的普通人1 天前
LLVM 前端与优化层:Clang 如何把 C 代码变成 IR
c语言·前端·状态模式
大文说跨境1 天前
亚马逊多店铺用过多款指纹浏览器,说点长期用的实际感受
前端·网络