単一のAPKをインストールする【adb】installでAPKをインストールする、-t/-d/-gオプション に対して、install-multipleinstall-multi-packageは複数のAPKファイルをまとめてインストールするサブコマンドである。

install-multipleでSplit APKをまとめてインストールする

Split APK(ベースAPKと、言語やABIごとに分割された追加APK)は、install-multipleにすべてのAPKファイルを並べて指定する。

$ adb install-multiple base.apk split_config.en.apk
Success

これらは同じパッケージの一部としてインストールされ、pm pathで確認すると2つのAPKが表示される。

$ adb shell pm path com.example.tilinstalltest
package:/data/app/com.example.tilinstalltest-xxxxxxxx/base.apk
package:/data/app/com.example.tilinstalltest-xxxxxxxx/split_config.en.apk

-pで既存アプリに分割APKを追加する

install-multipleのみで使える-pオプションに対象パッケージ名を指定すると、ベースAPKを含めずに分割APKだけを既存のインストール済みアプリへ追加できる。

$ adb install base.apk

$ adb install-multiple -p com.example.tilinstalltest split_config.en.apk
Success

install-multi-packageで複数パッケージをアトミックにインストールする

install-multi-packageは、パッケージ名が異なる複数のAPKを1回の操作でインストールする。全て成功するか全て失敗するかのアトミックな操作になる点がinstall-multipleとの違いである。

$ adb install-multi-package app1.apk app2.apk
Created parent session ID 1409770633.
Created child session ID 99357787.
Created child session ID 722032108.
Success

一方が失敗すると、単体では成功するはずのもう一方も含めて全体がインストールされない。以下はapp1.apkがtestOnly属性を持ち-tなしで失敗するケースで、app2.apk側も未インストールのまま終わる。

$ adb install-multi-package app1.apk app2.apk
adb: failed to finalize session
Failure [INSTALL_FAILED_TEST_ONLY: Failed to install test-only apk. Did you forget to add -t?]

$ adb shell pm list packages | grep -E "app1|app2"
(何も表示されない)

install-multi-packageが使うアトミックなマルチパッケージインストールはPackageInstaller.SessionParams.setMultiPackage()によって実現されており、このメソッドはAPI level 29(Android 10)で追加された。それより前のAndroid 9の実機で試したところ、pmが対応しておらずUnknown option --multi-packageのエラーになった。Android 16のエミュレータでは問題なく動作した。