a2h-resource
v0.1.2
Published
One-shot Android APK resource decoder/extractor — pure Node.js, dependency-free.
Maintainers
Readme
a2h-resource
一个零依赖的 Node.js 工具,用一条命令解码整个 Android APK 的资源——把编译后的二进制
格式(AndroidManifest.xml、resources.arsc、编译后的 layout/drawable XML、9-patch
PNG)还原成可读、真实命名、按限定符目录组织的资源文件。
- 纯 JavaScript(ESM),无原生依赖、无运行时依赖。
- Node.js
>= 20。 - Apache-2.0 协议。
使用方法
node src/a2h-resource.js app.apk -o app-out
# 若已全局安装:
a2h-resource app.apk [-o <输出目录>] # 默认输出目录:<apk 名>-out它会跑完整条流水线:
- 解压 APK(内置 ZIP 读取器,不依赖外部
unzip)。 - 解码
AndroidManifest.xml为文本,回填 id 引用(@id/…、@style/…、@android:…)并将常量人性化(wrap_content、gone等)。 - 重建
res/目录树:把混淆的扁平文件还原为真实名,归入限定符目录 (drawable-xhdpi/、values-zh-rCN/、layout-v22/等),解码二进制 layout/color XML,并根据npTcchunk 为 9-patch 重建边框。 - 重建
res/values*:strings(按 locale)、colors、dimens、bools、integers、 ids、<string-array>/<integer-array>/<array>,以及复杂 bag ——styles(含 parent + 解析后的 item)、attrs(format + enum/flag)、plurals。 - 转换 每个
<vector>drawable 为 SVG,输出到svg/。 - 透传 其余所有文件(
assets/、lib/、classes.dex、META-INF/等)保持原样。
app-out/
AndroidManifest.xml 解码 + 引用回填
res/ 限定符目录、真实名、解码 XML、还原后的 9-patch
values*/ strings、colors、dimens、styles、attrs、plurals……
svg/ VectorDrawable → SVG
assets/ lib/ classes.dex 原样透传作为库调用
import { extractApk } from 'a2h-resource';
const stats = extractApk('app.apk', 'app-out', { log: console.error });
// stats: { package, files, values, svg, ... }协议
Apache-2.0。底层的 AXML/ARSC 解码器移植自
axml-main(Androguard),同为 Apache-2.0。
