你终于收到了你的新手机:高分辨率,高刷新率,不拿来看剧实在是可惜了。所以在确认自己的设备受 Netflix 官方支持后,你装上 Play 商店、搜索 Netflix,却发现列表中没有你想要的结果。

是 SafetyNet 没过吗?是解锁影响了系统验证吗?还是开发版 Play 商店设备认证出了问题?

你不想深究、更不想折腾,转念一想 Android 自由、开放,既然自己的设备属于受支持的「合法设备」,上网找个安装包手动装上也未尝不可。于是在网上找了一个 Netflix 的 APK 安装包,装上后却发现 Netflix 提醒「应用功能损坏」,依然要求你前往 Play 商店重新安装。

找个 APK 就能手动安装的传统方法为什么失效了?

多 APK 支持特性

上述问题出现的根源在于,如果你从某个网站上(即便是相对正规的下载渠道)下载到的安装包是以往常见的 .apk 格式,那这个安装包在安装后很有可能只是一个功能并不完整的「精简版」。

这是「多 APK 支持」特性带来的必然结果。

多 APK 支持是 Google 自 Android 5.0 时代开始引入的特性,不同于以往一个 ​APK​ 文件包含功能组件的「大杂烩」做法,​多 APK 支持特性要求开发者把一个庞大的 APK 拆分成功能不同的模块;如果开发者选择通过 Play 商店进行应用分发,则还需要根据 Android App Bundle 的格式进行上传。

APK Bundle 示意

如此一来,当用户通过 Play 商店下载拥有多 APK 支持特性的应用时,Play 商店就会根据设备的具体情况下载必要的应用组件,这个过程中用于参考的数据包括处理器架构、屏幕尺寸、功能集支持情况和配置条件等等。

这就好比点外卖时有了备注功能,我们的设备在从 Play 商店下载安装应用前就会向应用商店发出提醒说:

我的机器采用 arm64 架构的处理器,系统语言为中文,所以 x86 架构的英文版就不用给我了,谢谢。

这种应用分发方式帮助开发者更好地进行应用分发,同时也为用户节省了宝贵的流量和带宽资源,因此 Play 商店里有不少应用都采用了这种应用分发方式。

但这也带来了一个问题——和微信这种拥有国内、国外两部分市场的应用不同,Netflix 这样的应用正常情况下只需通过 Play 商店进行分发,没有了应用商店的配合,网络上的独立安装包很有可能只是「身轻如燕」、没有任何附加功能的「毛坯」版本(base.apk)。

启动后依然会提示我们前往 Play 商店重新安装

这个版本即便能够正常安装,启动后 Netflix 还是会因为功能完整性问题提示你前往 Play 商店重新安装。

第三方渠道的重新打包

好在支持「多 APK」特性的应用越来越多,一些与之对应的第三方分发方式也逐渐成型。以 Netflix 的安装包为例:我们在 APKMirror 能够下载到一个后缀名为 .apkm 格式的安装包,在 ApkPureAptoide 这类网站上则能够下载到一个后缀名为 .xapk 格式的安装包。

从第三方渠道下载到的安装包

无论后缀名如何,这些与常见 APK 文件命名相似,但无法在 Android 系统中直接安装的文件其实都是各大网站针对多 APK 应用推出的应用打包方式。如果我们将 .xapk 文件后缀名改为 .zip 并打开,会发现里面塞满了不同名称、不同功能的 .apk 安装文件。

.xapk 拆包所得

从命名上其实我们已经可以大致猜出不同应用的功能。根据 Google 给出的官方文档,开发者可以使用过滤器将一个应用拆分成功能各不相同的部分,包括:

  • OpenGL 纹理压缩格式
  • 屏幕尺寸及可选屏幕密度
  • 设备功能集
  • Android(Go 版本)
  • API 级别
  • CPU 架构

除此之外,从 Netflix 的 XAPK 文件拆包结果来看,语言和本地化文件(config.语言缩写.apk)其实也是根据设备情况单独进行分发的。不过看到这里可能已经有人想问了:

既然 .xapk 文件都能直接「拆包」了,直接把得到的 .apk 文件一个个装上不行吗?

答案是否定的,事实上,第一个 .apk 文件可能就会把你卡住:

别想了,这些 .apk 文件可不是你想的那种 .apk 文件

使用 SAI 进行安装、管理

拆包一个个装这条路显然是走不通的,因此 APKMirror、APKPure、Aptoide 等网站纷纷推出了相应的工具来辅助安装,这里我们不再赘述。

APKPure 会提示你安装 APKPure 应用

除了拥有加密特性的 .apkm,针对相对通用一点 .xapk 文件,我们还可以借助专门的「多 APK 应用」安装工具 SAI(全名 Split APKs Installer)来进行安装和管理。

在手机上安装 SAI 之后,我们可以直接使用 SAI 来选择并安装手机里的 ​XAPK​ 文件。这里我们既可以直接将 XAPK 文件整个进行安装(如果出现报错可以去设置中打开「使用 ZipFile API」),也可以根据自身需求进行精细化选择和定制。

以 Netflix 的 XAPK 文件为例,在 SAI 的设置中打开「专业模式」后选中需要安装的 XAPK 文件并打开,此时 SAI 会弹出一个「多 APK」模块选单对选中 XAPK 文件中包含的所有模块进行展示。除了必须勾选的基础 APK、CPU 架构代码、DPI 配置资源和默认语言外,我们还可以根据实际需要手动勾选其它模块进行安装。

自定义安装

举个例子,在更换手机系统语言后,Netflix 会检测语言变化并自动从 Play 应用商店下载目标语言的 APK 安装包进行更新;如果你的设备里缺少 Play 服务或无法正常使用 Play 商店更新这类资源,使用 SAI 的高级模式进行安装和更新就非常方便了。

事实上,使用 SAI 进行安装的整个过程可以看作是对 Play Store 分发的一种「复现」或者说手动模拟,其它应用的安装过程自然也大同小异。如果你不清楚自己设备的架构,不妨求助 DevCheckCastro 这类应用。

关联阅读:解决 Android 的疑难杂症,从看懂设备参数开始

除了应用安装,SAI 同样也支持导出安装包,并且在导出时可以自行选择要包括的模块,方便控制安装包的体积,导出的格式是 ​APKs​,和 ​XAPK​ 类似的一种压缩格式。导出的文件同样可以由 SAI 打开安装。

使用 SAI 导出安装包

你可以在 Play 商店 免费下载 SAI,应用免 root 即可使用。

关联阅读:

参考文章:

> 下载少数派 客户端、关注 少数派公众号,发现更多实用的 Android 技巧 🌟