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


相关推荐
石小石Orz几秒前
星云SDK + 油猴:给LLM塑造肉身,陪伴你在每个网页
前端·人工智能
2601_963771374 分钟前
10 Best PHP Media CMS and Scripts for Web Creators in 2026
开发语言·前端·php
VaJoy33 分钟前
全面革新⚡️ Vue 3.6 项目工程的基础实现
前端·vue.js
苍何1 小时前
耗时 7 天,我们开源了腾讯 WorkBuddy 实战蓝皮书(建议收藏)
前端·后端
大家的林语冰1 小时前
😭 Electron 麻了,Deno 直接支持二进制应用,无需第三方桌面应用框架!
前端·javascript·node.js
Damai2 小时前
DOMPurify 完整介绍
前端·面试
随风一样自由2 小时前
【前端+跨域】跨域问题全面解析与解决方案指南
前端·跨域
小帅不太帅2 小时前
我随手发了几张截图,白拿了一个月 AI 顶配会员
前端·github
36岁的我开始学习打篮球2 小时前
外规内化技术架构
前端
雪隐2 小时前
用Flutter做背单词APP-03为了给单词库塞满数据,我让AI给我打了上万份工
前端·人工智能·后端