APK-Splits是谷歌为Android推出的应用分包技术,通过Play商店分发应用时,可根据不同的机型和CPU架构下载不同的资源文件,避免了把所有资源文件封装在一个APK包内,起到节省存储空间的作用。
1.如何判断应用程序是否使用了APK-Splits技术?
使用了APK-Splits技术的应用,一般会有两个或以上的APK文件,分别是base.apk和split_arm64v8a.xxhdpi.apk之类的,通常这些文件会放在一个压缩包内,其中base.apk是主程序,可以直接安装,但装好后打开APP会出现闪退的情况,这是因为缺少了split_arm64v8a.xxhdpi.apk这个资源文件,导致APP无法运行。
2.如何安装使用了APK-Splits技术的应用程序?
一般来说,国内大多数应用都是一个APK安装包封装了不同CPU架构和分辨率的资源文件,这种类型的应用程序都可以直接安装。需要使用ADB安装的APP多数是来自谷歌商店的游戏,但目前国内是无法访问谷歌商店的,所以有些人分享出的游戏安装包,安装之后无法正常运行。
下面通过Apple Music的安装来举例:
首先电脑上安装 adb 工具,一般情况下安装手机自带的驱动会顺带安装,然后手机上打开开发者模式,开启USB调试和USB安装功能,具体开启方法可百度,不同手机的打开方法稍有不同。
开启了调试模式后,用数据线连接手机,会询问是否允许调试,选择是。接下来电脑使用 cmd 命令行或者 PowerShell运行 adb 命令即可。
PS:Win+R 输入 cmd 点击运行可以开启cmd命令行,(Windows 10下面) Win+X 打开 PowerShell
输入以下命令,可以查看手机是否连接成功:
(编写文章时使用的是Linux系统,所以演示的命令路径和教程略有不同)
adb devices

出现设备ID和device说明 adb 已经成功连接了手机,接下来可以进行安装。
首先把压缩包解压,例如我解压到桌面,则路径为C:/Users/[username]/Desktop/apple_music
其中[username]是用户名,请替换成自己的用户名,对桌面的apple_music文件夹右键属性可以看到具体路径。
打开apple_music文件夹,发现有base.apk,split_config.arm64_v8a.apk,split_config.xxhdpi.apk三个APK文件。

接下来把这3个文件推送到手机临时目录里,命令如下:
PS: 请把 “/path/to/apk” 替换成安装包的实际路径,”/data/local/tmp”为安卓手机的临时文件目录,无需改动。
adb push /path/to/apk/base.apk /data/local/tmp
adb push /path/to/apk/split_config.arm64_v8a.apk /data/local/tmp
adb push /path/to/apk/split_config.xxhdpi.apk /data/local/tmp

执行完这三条命令,安装所需的apk资源已经全部放置到手机内部,然后输入以下命令进入安卓手机的Shell命令行模式:
adb shell

方法一:适用于手机上未安装BASE.APK的情况
#创建一个安装进程
pm install-create
#此时会返回一个结果Success: created install session [1254958325]

把session id后面方括号里的数字记录下来,后面的命令相关的 session ID 都替换成这个。
#写入base.apk
pm install-write 1254958325 base.apk /data/local/tmp/base.apk
#写入split_config.arm64_v8a.apk
pm install-write 1254958325 split_config.arm64_v8a.apk /data/local/tmp/split_config.arm64_v8a.apk
#写入split_config.xxhdpi.apk
pm install-write 1254958325 split_config.xxhdpi.apk /data/local/tmp/split_config.xxhdpi.apk
#完成写入所有APK后,执行合并安装
pm install-commit 1254958325

执行完合并安装命令后会返回Success,说明应用已经安装成功。
方法二:适用于手机上已经安装了BASE.APK,如桌面上已经有APPLE MUSIC但打开闪退的情况
PS:使用该方法需要知道应用的包名,如果不知道建议删除后再使用方法一进行安装
教程示例的 Apple Music 包名为com.apple.android.music
因为已经安装了主程序的包,所以只要补齐了资源包程序就能运行,大体和方法一致,只是创建安装进程时的命令加入的包名参数。
#创建该应用包名的安装进程
pm install-create -r -p com.apple.android.music
#此时会返回一个结果Success: created install session [529449747]
#写入split_config.arm64_v8a.apk
pm install-write 529449747 split_config.arm64_v8a.apk /data/local/tmp/split_config.arm64_v8a.apk
#写入split_config.xxhdpi.apk
pm install-write 529449747 split_config.xxhdpi.apk /data/local/tmp/split_config.xxhdpi.apk
#把所有资源APK写入完成后,执行合并命令
pm install-commit 529449747
执行完合并命令后会返回Success,说明应用已经安装资源文件,现在就可以使用APP了。