下载了一份 Android 游戏,文件却以 .xapk 结尾:点开不能安装,改成 .apk 也没用。问题通常不在文件名,而在于它装着同一个应用的多个 APK,需要一起安装。
这篇教程以《反物质维度》(Antimatter Dimensions)为例,说明怎样在电脑上检查 XAPK、选择正确的拆分包,再用 ADB 安装到手机。本次实测日期为 2026 年 10 月 21 日,安装版本为 3.19.0;“最新版本”会变化,下载前请重新核对。
已经拿到完整、可信且匹配设备的拆分包?核心命令是
adb install-multiple,不是adb install game.xapk。安装前先备份已有游戏存档,不要为了绕过报错直接卸载旧版。

一、先分清 APK、XAPK 和 AAB
APK 是 Android 安装包;但某些 APK 只是应用的一部分,不能独立使用。XAPK 则是第三方分发中使用的一类打包容器,常见内容是 ZIP 结构里的 APK、描述文件与图标,也可能带有 OBB 资源。本次拿到的就是 ZIP 格式的 XAPK。
AAB 是 Android 的应用发布格式,并不是拿来直接执行 adb install 的 APK。.apks 也不要一概按 XAPK 处理:如果是 bundletool 生成的 APK Set,应按它的设备选择与安装流程操作。Android 官方的 App Bundle 测试文档介绍了这条路线。
Android 可以把基础包、架构包、语言包、屏幕密度包等视作同一个应用;它们不是要逐一安装的几款软件。分包机制见 Android App Bundle 格式说明。
二、准备工具与手机连接
下面命令使用 Linux/Ubuntu 的 Bash 语法。Windows、macOS 也能使用 ADB,但路径和多行续写方式不同,不要原样照搬反斜杠换行。安装 APK 本身不需要 Root,也不需要解锁 Bootloader。
ADB 优先从 Google 官方 Platform-Tools 获取。apksigner 属于 Android SDK Build-Tools,和 Platform-Tools 不是同一个组件。Ubuntu 也可以先安装发行版提供的工具;若旧版工具不认识新签名属性,再用官方新版 Build-Tools 复核。
sudo apt update
sudo apt install adb unzip apksigner
adb version
adb devices -l
- 在手机的开发者选项里开启 USB 调试,用支持数据传输的 USB 线连接电脑。
- 解锁手机,确认“允许这台计算机进行 USB 调试”的提示。
adb devices -l中应显示device;unauthorized表示还没授权,空列表则先检查线材、USB 模式、驱动或 Linux 设备权限。
下文的 SERIAL 是占位符,要替换成上一步看到的设备序列号。即使只接一台手机,也建议保留 -s,避免以后多设备时装错。USB 授权机制和安装命令可查 ADB 官方说明。
三、检查下载是否完整,以及包里到底有什么
先从应用的官方商店或开发者渠道获取安装包。《反物质维度》的官方商店入口是 Google Play:Antimatter Dimensions。本次因设备上的 Play 尚未登录,实际使用了 APKPure 的第三方 XAPK 镜像;这不是官方直下,本文也不重新分发游戏安装包。
把下载文件放到当前目录,然后检查 ZIP 完整性、文件清单,并读取描述文件:
unzip -t "AntimatterDimensions-3.19.0.xapk"
unzip -l "AntimatterDimensions-3.19.0.xapk"
unzip -p "AntimatterDimensions-3.19.0.xapk" manifest.json
本次包的组成如下。注意第一项虽然没有叫 base.apk,但它就是基础包:
AntimatterDimensions-3.19.0.xapk
├── kajfosz.antimatterdimensions.apk 基础包
├── config.armeabi_v7a.apk 32 位 ARM 原生库
├── config.xhdpi.apk 屏幕密度资源
├── manifest.json 分发包描述
└── icon.png 图标,不参与安装
描述文件给出的包名是 kajfosz.antimatterdimensions,版本名 3.19.0,版本号 30190000。它只是分发包里的描述信息,不能代替 APK 自身签名与安装后读回检查。
这份完整 XAPK 为 68,917,122 字节,约 65.72 MiB,ZIP 检查通过。本次下载曾出现中途断开的残缺文件,因此不能看到文件名或显示了一个“看起来正确的大小”就开始安装。续传后仍要检查完整性;有可信来源提供校验值时,再进行对照。
sha256sum "AntimatterDimensions-3.19.0.xapk"
本次文件的 SHA-256 为:
1e5782461ff81b687775c0fdcac74faa7dfe8299238a809784cc91a9f387c259
这个值只用于识别本次文件,不是开发者发布的真实性背书。其他架构、后续版本或重新打包的 ZIP 可能有不同值,不能只凭文件名相同就认为应当一致。
四、核对 CPU 架构,再提取需要的包
adb -s SERIAL shell getprop ro.product.cpu.abilist
实测手机报告:
arm64-v8a,armeabi-v7a,armeabi
所以它虽然是 ARM64 设备,仍能运行这份 armeabi-v7a 包。不是所有 ARM64 手机都兼容 32 位应用;若列表只有 arm64-v8a,就应寻找对应的 64 位版本。也不要随手删掉屏幕资源包,或混用另一版本的 split。
确认目录清单后,在普通用户的独立临时目录里,只提取这三个明确的文件。不要以 Root 身份解压陌生压缩包;若包中出现绝对路径、../ 或可疑安装脚本,应停止处理。
xapk_stage="$(mktemp -d)"
unzip "AntimatterDimensions-3.19.0.xapk" \
"kajfosz.antimatterdimensions.apk" \
"config.armeabi_v7a.apk" \
"config.xhdpi.apk" \
-d "$xapk_stage"
icon.png 和 manifest.json 不应传给安装命令。其他应用的文件名、所需模块、语言和架构可能不同,不能直接复制本例三件套。
五、检查每个 APK 的签名
不要只查基础包。对将要一起安装的每一个 APK 执行校验,并核对签名者证书指纹:
apksigner verify --verbose --print-certs \
"$xapk_stage/kajfosz.antimatterdimensions.apk"
apksigner verify --verbose --print-certs \
"$xapk_stage/config.armeabi_v7a.apk"
apksigner verify --verbose --print-certs \
"$xapk_stage/config.xhdpi.apk"
本次三个文件都显示 Verifies,v2/v3 校验通过,签名者证书 SHA-256 一致:
24c5158c0de5d472f018107476ca6e5fd8c1442b404c3fe49a26c2024dd1fd14
签名有效,不等于已经证明“来自官方”或“没有恶意代码”。判断发行者还需要来自可信渠道的签名基线。本次没有拿到独立可信的官方证书指纹进行比对,因此只确认了包的签名完整性和分包签名一致性,不声称完成官方来源认证。证书名称里写着 Google 等字样也不能当作身份证明。
本次使用的旧版 apksigner 31.0.2 还报告了未识别的 SourceStamp 属性,Verified for SourceStamp: false。这意味着没有获得来源戳验证结论,不能把警告藏起来。它与 APK 的 v2/v3 校验结果要分别看待;也不要因为 v1 或 v4 显示 false,就简单认为所有签名都失败。工具含义见 apksigner 官方文档。
六、用一条命令安装整套拆分包
先导出已有游戏存档,再执行:
adb -s SERIAL install-multiple -r \
"$xapk_stage/kajfosz.antimatterdimensions.apk" \
"$xapk_stage/config.armeabi_v7a.apk" \
"$xapk_stage/config.xhdpi.apk"
本次实际返回:
Success
install-multiple 将同一应用的多个包放进一次安装会话;-r 表示允许替换已有应用并保留其数据,但不能替代存档备份。只安装基础包、逐个点击 split,或者把整个下载目录中的 APK 不加选择地全塞进去,都不是可靠做法。
遇到签名不兼容,不要立刻卸载:卸载可能清除本地存档。应先确认旧版来源、版本及备份情况,再选择同签名的更新包。这篇教程不需要重新签名、不需要关闭系统安全保护,也不需要执行强制降级。
七、读回版本,确认真正进入了应用
安装命令成功只是第一步。先读取包管理器里的版本与安装路径:
adb -s SERIAL shell dumpsys package kajfosz.antimatterdimensions \
| grep -E 'versionName=|versionCode=|primaryCpuAbi='
adb -s SERIAL shell pm path kajfosz.antimatterdimensions
本次读回:
primaryCpuAbi=armeabi-v7a
versionCode=30190000 minSdk=24 targetSdk=37
versionName=3.19.0
然后从手机图标打开游戏;本例也可以直接启动对应入口:
adb -s SERIAL shell am start \
-n kajfosz.antimatterdimensions/.MainActivity
实测设备为 Redmi K60,运行 Android 17。首次启动出现“与最新 Android 版本不兼容”的系统提醒,确认后进入了下方的 Start game 开始界面。提醒出现的根因尚未确定,不能凭这句提示就断定 target SDK 过低,或宣称忽略提醒永远安全。

本次完成了安装成功、版本读回和启动界面确认,没有把长期游玩、存档恢复、广告、内购或所有 Android 版本兼容性逐项测试完。安装教程的成功边界,到这里为止。
八、常见报错怎么排查
以下是一般排查方向,不是本次全部遇到过的报错:
| 现象/错误 | 先检查什么 |
|---|---|
unauthorized | 解锁手机,确认 USB 调试授权;不要绕过设备所有者授权。 |
offline 或设备消失 | 检查线材、USB 模式和连接;多设备时确认 -s SERIAL 指向正确。 |
INSTALL_FAILED_MISSING_SPLIT | 是否只装了 base,或漏掉应用需要的拆分模块。 |
INSTALL_FAILED_NO_MATCHING_ABIS | APK 原生库架构是否在设备 ABI 列表里,尤其是仅支持 64 位的手机。 |
INSTALL_FAILED_UPDATE_INCOMPATIBLE | 新旧包签名是否相容;不要靠卸载旧版盲目“修复”。 |
INSTALL_FAILED_VERSION_DOWNGRADE | 本地装的版本号可能更高;改找合适更新包,不默认强制降级。 |
| 空间不足、解析失败 | 手机剩余空间、ZIP 校验、下载是否残缺,以及各 APK 是否来自同一版本。 |
九、如果 XAPK 还带着 OBB 呢?
本次包里没有 OBB,所以无需额外复制资源。有些游戏使用 OBB 扩展资源,通常放在共享存储的 Android/obb/应用包名/,而且资源文件名、应用包名和版本关系必须正确,参见 APK Expansion Files 官方说明。
不能据此认为现代 Android 上任意文件管理器都能往这个目录写文件;系统存储限制和厂商实现存在差异。这类包应按开发者的资源交付方式处理,优先使用商店安装,不要把本例的三包安装命令当作所有大型游戏的通用解法。
十、安装后收尾
确认能正常启动,再按需要保留安装包和校验值。无需继续调试时,可以关闭 USB 调试;若不是自己长期使用的电脑,也应撤销它的调试授权。不要把 ADB 接口公开到公网。
整个流程可以概括为:可信获取 → 检查完整性 → 确认分包与架构 → 校验签名 → 一次安装 → 读回版本 → 实机启动。下一次遇到 XAPK,先看包里有什么,比反复改后缀更有用。