签名
keygen
xenolith-apk-editor keygen --key <key.pem> --cert <cert.pem>
写出未加密的 PKCS#8 密钥和一张自签的 X.509 证书。两个路径都必填。换一把密钥,就不能覆盖用这把密钥签过的应用。
--key私钥写到哪里。--cert证书写到哪里。--cn证书上的名字。默认是 xenolith-dev-key。
sign
xenolith-apk-editor sign <unsigned.apk> -o <signed.apk> --key <key.pem> --cert <cert.pem>
给一个 APK 签名。-o、--key 和 --cert 都必填。密钥是 PKCS#8,证书是 X.509,PEM 或 DER。v3 的窗口来自清单里的 minSdk。没有密钥轮换。
-o, --output签好的 APK。- 把字节写到 stdout。--key私钥,PEM 或 DER。--cert证书,PEM 或 DER。--no-v3只写 v2 块。
直接改
patch
xenolith-apk-editor patch <app.apk> -o <out.apk> [edits]
改一个 APK 并写出新文件。你点名要改什么。至少要有一项修改。启动图标会按每种密度重新采样。
-o, --output输出 APK。- 把字节写到 stdout。-l, --label应用名称。-p, --package包名。-n, --version-nameversionName。--version-codeversionCode。非负整数,放得进 32 位。--debuggabletrue 或 false。设置 application 的 android:debuggable。--add-permission添加 uses-permission。参数可以重复。已经有的权限不会再加一份。--remove-permission去掉 uses-permission。没有这个名字就不动。--add-meta名字=值。给 application 加一条 meta-data。同名的会被换掉。--remove-meta按名字去掉 application 的 meta-data。--icon用一张图片换掉启动图标。--so替换 lib/arm64-v8a/libxenolith.so。这条保持不压缩,并按 16 KB 对齐。换的是这个槽,不是任意一个库。
patch-manifest
xenolith-apk-editor patch-manifest <AndroidManifest.xml> -o <out.xml>
同样的清单修改,对象是二进制 AndroidManifest.xml,不是整包 APK。这条命令不改图标,也不改原生库。
-o, --output输出的清单。-l, --label应用名称。-p, --package包名。-n, --version-nameversionName。--version-codeversionCode。--add-permission添加 uses-permission。可以重复。--remove-permission去掉 uses-permission。--add-meta给 application 的 meta-data 用的 名字=值。--remove-meta按名字去掉 application 的 meta-data。
图片和 dex
replace-entry
xenolith-apk-editor replace-entry <app.apk> <zip-path> --from <image> -o <out.apk>
换掉 APK 里的一张图片。压缩包里的路径不变,因为 resources.arsc 指着它。nine-patch 的 .9.png 会被拒绝。--to 接受 png、webp 或 jpeg。
--from要放进去的图片文件。-o, --output输出 APK。- 把字节写到 stdout。--topng、webp 或 jpeg。默认用条目上已有的扩展名。--webp-lossy有损 WebP。默认是无损。
assemble
xenolith-apk-editor assemble <smali-dir> -o <out.dex>
读目录下每一个 .smali,写出一个 dex。
optimize
xenolith-apk-editor optimize <app.apk> -o <out.apk>
重新压缩那些未压缩的条目。resources.arsc 和会映射进内存的 .so 保持不压缩。
-o, --output输出 APK。必填。不能用 - 代替文件。
Framework
if, install-framework
xenolith-apk-editor if <framework.apk>
安装一份 framework 资源表,后面的拆包才能解析它的引用。默认标记是 1。
-t, --frame-tag这份 framework 的标记。默认是 1。
list-frameworks
xenolith-apk-editor list-frameworks
打印已安装的 framework:标记、包名、类型数量。
clean-frameworks
xenolith-apk-editor clean-frameworks
删掉已安装的 framework 表。
--frame-path要清空的 framework 目录。不写就清通常的位置。