Android手动安装App bundle
最近发现手机里的b站即使在完全关闭的情况下,还是会发推送消息,于是一气之下删了换上国际版。然而国际版的应用大多早就换上了咕果的新技术,下下来是一堆apk,单装一个还没法使用。虽然部分国外安装器提供了安装xapk的功能(如apkpure),然而实质上做的也只是调用系统api来处理这些apk文件,而且在小米手机上还要关闭miui优化才装的上。。
于是到网上找了个教程,发现结果最后还是用的pm
,和传统安装的区别在于,咕果把split apk的安装流程做成了事务形式,创建transaction之后,把要安装的多个apk文件以二进制流的形式读入,然后再在submit transaction之后,通过内部处理完成apk的最终安装。还有些其他教程说用可以用adb install-multiple
,然而我的adb似乎没有这个选项,只好作罢了。
以b站国际版为例,从网上下载的xapk包展开后有以下类似内容:
$ ls -al
total 147503
drwxrwx--x 2 root sdcard_rw 3488 1970-01-01 08:00 .
drwxrwx--x 8 root sdcard_rw 20480 1970-01-01 08:00 ..
-rw-rw---- 1 root sdcard_rw 59 1970-01-01 08:00 APKComboInstaller.url
-rw-rw---- 1 root sdcard_rw 74755493 1970-01-01 08:00 com.bilibili.app.in.apk
-rw-rw---- 1 root sdcard_rw 74301935 1970-01-01 08:00 config.armeabi_v7a.apk
-rw-rw---- 1 root sdcard_rw 70616 1970-01-01 08:00 config.hdpi.apk
-rw-rw---- 1 root sdcard_rw 66460 1970-01-01 08:00 config.ldpi.apk
-rw-rw---- 1 root sdcard_rw 66460 1970-01-01 08:00 config.mdpi.apk
-rw-rw---- 1 root sdcard_rw 99803 1970-01-01 08:00 config.tvdpi.apk
-rw-rw---- 1 root sdcard_rw 70616 1970-01-01 08:00 config.xhdpi.apk
-rw-rw---- 1 root sdcard_rw 70616 1970-01-01 08:00 config.xxhdpi.apk
-rw-rw---- 1 root sdcard_rw 70616 1970-01-01 08:00 config.xxxhdpi.apk
-rw-rw---- 1 root sdcard_rw 1255351 1970-01-01 08:00 config.zh.apk
-rw-rw---- 1 root sdcard_rw 6602 1970-01-01 08:00 icon.png
-rw-rw---- 1 root sdcard_rw 3331 1970-01-01 08:00 manifest.json
出于严格的安全措施考虑,放在/sdcard
目录下的文件存在权限问题,pm
读取不到,因而根据报错信息的建议,把文件复制到权限更为宽松的/data/local/tmp
,然后就可以正常进行软件包的读取操作了。
安装步骤大致可以分为三步:
-
创建安装事务
pm install-create
如果成功执行,命令应该给出类似的返回信息:
Success: created install session [631152719]
其中方括号里的是创建成功的事务编号,后面还要用到,需要记下来。
-
添加安装包 安装split apk的关键就在这里,我们将分散的多个apk通过
pm install-write
命令添加到安装数据流中。该命令需要提供当前apk文件名、文件大小、事务编号和分包编号作为参数,一般将主程序包作为第一个添加:pm install-write -S 74755493 631152719 0 com.bilibili.app.in.apk
一般来讲,还需要添加库包、资源包、语言包,这些根据自己的需求添加即可。这里选择
armeabi
、xxhdpi
(1080P)、zh-CN
成安装:pm install-write -S 74301935 631152719 1 config.armeabi_v7a.apk pm install-write -S 70616 631152719 2 config.xxhdpi.apk pm install-write -S 1255351 631152719 3 config.zh.apk
这些包的顺序似乎没有多大影响,我按照这个顺序安装出来是成功的。
- 提交安装事务
pm install-commit 631152719
完成commit之后,
pm
开始安装所导入的应用包,并会在命令行中给出Success
或者Failed
信息。
然而在尝试过程中发现,似乎还是得关闭MIUI优化,不然会报出INSTALL_FAILED_USER_RESTRICTED
错误,估计是MIUI阻止了安装= =