installはAPKファイルを端末にインストールするサブコマンドである。

installで基本的なインストールを行う

引数にローカルのAPKファイルのパスを指定する。

$ adb install app.apk
Performing Streamed Install
Success

-rは既存インストールの上書きを許可する

-rは本来「既にインストール済みのアプリを上書きする」ためのオプションだが、Android 9の実機・Android 16のエミュレータのどちらで試しても、-rを付けずに同じアプリを再度installしてもエラーにならず上書きされた。dumpsys packageで確認すると、再インストール後もfirstInstallTimeは変わらずlastUpdateTimeだけが更新されており、内部的にはアンインストール→再インストールではなく更新として扱われている。両端末とも同じバージョンのadbクライアントを使っているため、OSバージョンではなくadbクライアント側の挙動である可能性もある。

$ adb install app.apk
Performing Streamed Install
Success

$ adb install app.apk
Performing Streamed Install
Success

-tでtestOnly属性のAPKを許可する

マニフェストのandroid:testOnly="true"が付いたAPKは、-tを付けずにインストールしようとするとエラーになる。

$ adb install test-only-app.apk
Failure [INSTALL_FAILED_TEST_ONLY: Failed to install test-only apk. Did you forget to add -t?]

-tを付けるとインストールできる。

$ adb install -t test-only-app.apk
Success

-dでバージョンコードのダウングレードを許可する

versionCodeが現在インストールされているものより低いAPKをインストールしようとすると、-dを付けなければエラーになる。

$ adb install old-version-app.apk
Failure [INSTALL_FAILED_VERSION_DOWNGRADE: Downgrade detected: Update version code 1 is older than current 2]

-dを付けるとダウングレードできる。ただしヘルプの記載通り、この動作が許可されるのはandroid:debuggable="true"のAPKに限られる。

$ adb install -d old-version-app.apk
Success

android:debuggableを付けていないAPKに対しては、-dを付けてもダウングレードは許可されずエラーになる。

$ adb install -d old-version-non-debuggable-app.apk
Failure [INSTALL_FAILED_VERSION_DOWNGRADE]

-gで全ランタイム権限を自動許可する

-gを付けずにインストールすると、マニフェストで宣言したランタイム権限は未許可の状態になる。

$ adb install app-with-permission.apk
Success

$ adb shell dumpsys package com.example.app | grep android.permission.CAMERA
android.permission.CAMERA: granted=false

-gを付けると、宣言済みの全ランタイム権限が自動的に許可された状態でインストールされる。

$ adb install -g app-with-permission.apk
Success

$ adb shell dumpsys package com.example.app | grep android.permission.CAMERA
android.permission.CAMERA: granted=true

--instantでインスタントアプリとしてインストールする

--instantを付けると、インストール済みアプリとしてではなくインスタントアプリとしてインストールできる。

$ adb install --instant app.apk
Success