これらのコマンドを使用する前に、Android SDK のコマンドラインツール、プラットフォームツール、および必要なプラットフォームまたはシステムイメージをインストールします。ANDROID_HOME を SDK ディレクトリに設定し、その cmdline-tools/latest/bin、platform-tools、emulator ディレクトリを PATH に追加します。
Android Debug Bridge #
adb はホスト側のクライアントをローカルの ADB サーバーおよびデバイス側の adbd デーモンに接続します。複数のデバイスまたはエミュレーターが利用可能な場合は、必ず -s SERIAL で対象を明示的に選択します。
adb devices -l
adb -s SERIAL get-state
adb -s SERIAL shell getprop ro.build.fingerprint
adb -s SERIAL rebootadb devices -l は、対象を device、offline、または unauthorized として報告します。unauthorized を解決するには、デバイスに表示される RSA キーの確認プロンプトを承認します。ローカルサーバーの状態が古くなっている場合に限り、adb kill-server の後に adb start-server を実行します。本番ビルドでは、shell ユーザーは root ではありません。
パッケージとファイル #
データを保持するには、--replace を指定して APK をインストールします。分割 APK には install-multiple を使用し、パッケージのメタデータと権限を管理するにはシェルから pm を使用します。
adb -s SERIAL install --replace app.apk
adb -s SERIAL install-multiple base.apk config.arm64_v8a.apk config.en.apk
adb -s SERIAL uninstall com.example.app
adb -s SERIAL shell pm path com.example.app
adb -s SERIAL push local.txt /sdcard/Download/
adb -s SERIAL pull /sdcard/Download/report.txt .adb push と pull は shell に与えられた権限の範囲で動作します。スコープストレージとアプリケーション専用ディレクトリによってアクセスが制限される場合があります。run-as PACKAGE はデバッグ可能なアプリケーションに限って使用します。
シェル、ログ、診断 #
バイナリまたは変更されていないコマンド出力には exec-out を使用します。これは疑似端末を割り当てないためです。無制限のログストリームの転送を避けるには、Logcat を取得元でフィルタリングします。
adb -s SERIAL shell cmd package list packages
adb -s SERIAL exec-out screencap -p > screenshot.png
adb -s SERIAL logcat -c
adb -s SERIAL logcat -v threadtime MyTag:D '*:S'
adb -s SERIAL bugreport report.zip
adb -s SERIAL shell dumpsys activity activitiesbugreport はログとシステム状態を収集し、機密データを含む可能性があります。dumpsys はサービス固有の診断出力を公開します。利用可能なサービスを一覧表示するには、adb shell dumpsys -l を実行します。
ネットワークとワイヤレスデバッグ #
forward はデバイスのサービスをホストのポート経由で到達可能にします。reverse はホストのサービスをエミュレーターまたは USB 接続されたデバイスから到達可能にします。
adb -s SERIAL forward tcp:8080 tcp:8080
adb -s SERIAL reverse tcp:3000 tcp:3000
adb pair HOST:PAIRING_PORT
adb connect HOST:CONNECT_PORTワイヤレスデバッグには、Android の認証済みペアリングフローが必要です。信頼できるネットワークでのみ使用し、終了後は adb disconnect HOST:CONNECT_PORT で切断します。
Fastboot #
fastboot は実行中の Android システムではなく、ブートローダーと通信します。デバイスの UI から fastboot モードに入るか、adb reboot bootloader を実行します。コマンドセット、利用可能なパーティション、ロック解除ポリシーはデバイスごとに異なります。
fastboot devices -l
fastboot getvar product
fastboot getvar current-slot
fastboot reboot fastbootブートローダー変数を確認するには fastboot getvar all を使用します。ただし、一部のデバイスでは出力が制限されます。A/B デバイスでは current-slot でスロットを確認できます。パーティション名を推測するのではなく、イメージパッケージに記載されたフラッシュ手順を使用します。
フラッシュとリカバリ #
書き込み操作の前に、選択したデバイス、イメージのハッシュ、パーティション名、スロット、ブートローダーポリシーを確認します。
shasum -a 256 boot.img
fastboot flash boot boot.img
fastboot --set-active=a
fastboot rebootロック解除、重要なパーティションのフラッシュ、スロットの変更によって、データが消去されたり、デバイスが起動不能になったりする可能性があります。不明なデバイスや別の製品向けにビルドされたイメージに対して fastboot flash を使用しないでください。
その他 #
SDK と仮想デバイスの管理 #
sdkmanager は SDK パッケージをインストールし、avdmanager は Android Virtual Device(AVD)を作成します。
sdkmanager --list
sdkmanager "platform-tools" "platforms;android-35"
sdkmanager "system-images;android-35;google_apis;x86_64"
avdmanager create avd --name api-35 --package "system-images;android-35;google_apis;x86_64"sdkmanager --licenses でライセンスに同意します。修飾されていないパッケージ更新によってビルド環境が変わる可能性があるため、CI ではパッケージのリビジョンを固定します。
エミュレーター #
emulator -list-avds
emulator -avd api-35 -no-snapshot
emulator -avd api-35 -wipe-dataクリーンな起動には -no-snapshot を使用し、状態のリセットを意図する場合に限って -wipe-data を使用します。
APK と App Bundle の検査 #
apkanalyzer はアプリケーションをインストールせずに、APK のメタデータとバイトコードを読み取ります。
apkanalyzer manifest application-id app.apk
apkanalyzer apk summary app.apk
apkanalyzer dex packages app.apkbundletool は Android App Bundle をインストール可能な APK セットに変換し、デバイス固有の分割を選択します。
java -jar bundletool-all.jar build-apks --bundle=app.aab --output=app.apks
java -jar bundletool-all.jar install-apks --apks=app.apks分割の選択を再現する場合は、get-device-spec で --connected-device を使用します。署名鍵と生成された .apks アーカイブはリリース成果物として扱います。
Gradle #
Gradle ラッパーは、プロジェクト内で再現可能なビルドツールを提供します。
./gradlew assembleDebug
./gradlew installDebug
./gradlew lintDebug
./gradlew connectedDebugAndroidTestグローバルにインストールされた Gradle のバージョンではなく、ラッパーを実行します。connectedDebugAndroidTest には、利用可能なエミュレーターまたは USB 接続されたデバイスが必要です。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)