ADB のヒントとテクニック: すべてのパワー ユーザーが知っておくべきコマンド

Android Debug Bridge には、あなたが知らないことがたくさんあります。 ADB を使用する際の役立つヒントやコツについては、ここをクリックしてください。

クイックリンク

  • シェルアクセス
  • 複数のデバイスに接続する
  • ファイルの転送
  • ロギング
  • ADB を介してインストールされているアプリを一覧表示する
  • ADB を介したアプリのインストールとアンインストール
  • ADB を使用した APK の抽出
  • アプリケーションデータのバックアップと復元
  • アプリコンポーネントのリスト表示
  • アクティビティ、サービス、放送受信機の立ち上げ
  • ほぼすべてのアプリの無効化と有効化
  • スクリーンショットのキャプチャ
  • PCとAndroidデバイス間でバイナリデータを転送する

あなたが MOD シーンに潜んでいる Android 愛好家、またはアプリ開発者として長年活動してきた人なら、 遅かれ早かれ、Android Debug Bridge (ADB for Android) と呼ばれる優れたツールに出会うことになるでしょう。 短い。 Android Studio ではコマンド ライン コンパニオン ユーティリティとして広く使用されています。 Android 開発者は、Android にアプリを手動でインストールしてテストするためのスタンドアロン ソリューションとしても使用します。 Androidスマートフォン エミュレートされた Android デバイスも同様です。

しかし、ADB ができることはたくさんあり、そのほとんどは開発者だけに役立つわけではありません。 あなたが開発者ではなく、この記事を読んでいるとしても、ADB を 1 回か 2 回使用したことがある可能性は十分にあります。 アプリをサイドロードする または権限を微調整します。 しかし、ADB が使えるのはそれだけではありません。 あなたが知らないかもしれない ADB を使用するためのヒントやコツについては、読み続けてください。

コンピュータ上で ADB を起動して実行する必要があります。 に関する記事をぜひチェックしてください ADBのインストール方法 あなたが助けを必要とする場合。 Windows を使用している場合は、次のことも必要です。 適切な OEM USB ドライバーをインストールする Android デバイス用。

シェルアクセス

以前に ADB を使用したことがある場合は、コマンドをすべて 1 行で実行することに慣れているかもしれません。 ただし、ADB を使用してデバイス上でターミナル シェルを開いてコマンドを直接実行することもできます。 そしてそれは簡単です!

ターミナルまたはコマンド プロンプト ウィンドウで次のようにします。

adb shell

すると、次のように歓迎されます。 $ デバイス上でコマンドを直接実行できるシンボルです。

複数のデバイスに接続する

ADB は同時に複数のデバイスと通信できます。 ただし、このようなシナリオで ADB コマンドを発行する場合は、ターゲット デバイスを指定する必要があります。

これを行うには、ターゲット デバイスのシリアル番号を知る必要があります。 devices コマンドを使用してシリアルを取得できます。

adb devices

ここで、 -s ターゲットデバイスのシリアル番号を指定するオプション。 例:

adb -s <serialnumber> shell

ファイルの転送

コマンドライン愛好家のために、ADB は Android デバイスとの間でファイルを転送するための非常に簡単な方法を提供します。 ただ使用してください pull デバイスからファイルとディレクトリをコピーするコマンドと、 push ファイルとディレクトリをデバイスにコピーするコマンド:

ファイルまたはディレクトリとそのサブディレクトリを Android デバイスにコピーする場合は、次の手順を実行します。

adb push local_path device_path
  • 例: adb push D:\image.png /sdcard

次のコマンドは、ファイルまたはディレクトリとそのサブディレクトリを Android デバイスからホスト PC にコピーします。

adb pull device_path local_path
  • 例: adb pull /sdcard/backup_April.tar D:\Backup

ロギング

Android Studio が提供するのは、 Logcat ウィンドウ、デバイスからのログのリアルタイム表示をサポートします。 ただし、バッチ処理にはあまり役に立ちません。 幸いなことに、Android デバイスには、ADB を通じて利用できる logcat コマンドが同梱されており、システムおよびアプリケーションのログ メッセージをダンプして画面に出力するために使用できます。

基本的な構文は次のとおりです。

adb logcat

さらに詳しく知りたい場合は、チュートリアルをご覧ください。 Android でシステム logcat、カーネル ログ、dmesg を取得する方法.

イースターエッグ

Google は、logcat コマンドに関連した 2 つの気の利いたイースターエッグを提供しています。

  1. 1 つ目は lolcat です。 LOL猫のミーム. 通常の logcat コマンドと同じ出力が得られます。
    adb lolcat
  2. 2 番目のコマンドは、longcat です。これは、logcat -v long コマンドと同等です。 すべてのメタデータ フィールドと、空白行を含む個別のメッセージが表示されます。
    adb longcat

ADB を介してインストールされているアプリを一覧表示する

デバイスにインストールされているアプリを確認するには、次のコマンドを使用できます。

adb shell pm list packages

これにより、インストールされているアプリのパッケージ名のリストが返されます。それぞれの行には先頭に次の文字が付加されます。 package:.

オプション

より具体的なリストを取得するために使用できるオプションもいくつかあります。

  • -f には、各アプリのベース APK へのパスとそのパッケージ名が含まれます。
  • -a 既知の非 APEX パッケージがすべて返されるようにします。
  • -d このコマンドは無効なパッケージのみを返します。
  • -e このコマンドは有効なパッケージのみを返します。
  • -s このコマンドはシステム パッケージのみを返します。
  • -3 このコマンドにより、サードパーティのパッケージのみが返されます。
  • -私 各パッケージのインストーラー パッケージ名が含まれます。
  • -U 各パッケージのパッケージ UID が含まれます。
  • -u アンインストールされたパッケージが含まれます。
  • --show-バージョンコード 各パッケージのバージョン コードが含まれます。
  • --apex のみ APEX パッケージのみを返します。
  • --uid 指定された UID を持つパッケージのみを表示します。
  • - ユーザー 指定されたユーザー ID に属するパッケージのみが表示されます。

ADB を介したアプリのインストールとアンインストール

これは ADB の比較的一般的な使用法ですが、とにかく言及する価値があります。 他の方法の中でも、ADB を利用して次のことを行うこともできます。 Android アプリのインストールとアンインストール Android デバイスに。

APKのインストール

コンピューターに APK がある場合は、次の方法でデバイスにインストールできます。

adbinstall-rsomeapk.apk

忘れずに交換してください someapk.apk インストールする APK へのフルパスを指定します。

オプション

ADB を介して APK をインストールするには、多数のオプションがあります。

  • -r このオプションを使用すると、ADB が既存のアプリの上にインストール (つまり、更新) できるようになります。 Android Pie 以降では、このオプションを指定する必要はありません。
  • -R Android Pie 以降の場合、このオプションを使用すると、アプリがすでにインストールされている場合にインストールが失敗します。
  • -私 オプションを使用すると、インストーラー パッケージ名を指定できます。 これは、Android が APK をインストールしたものを知りたい場合に返されるものです。
  • -t オプションにより、APK を使用できるようになります アンドロイド: testOnly = "true" インストールされるマニフェストに含まれます。
  • -d オプションを使用すると、指定した APK をすでにインストールされているアプリにダウングレードできます。 これは、アプリの両方のバージョンがデバッグ可能な場合にのみ機能します。
  • -g Android Marshmallow 以降のオプションでは、インストールされているアプリにすべての実行時権限が自動的に付与されます。

それだけではありません。 完全なリストが必要な場合は、組み込みのドキュメントを確認してください。

複数の APK とバンドル

複数のアプリから、またはアプリバンドルをインストールするために、一度にインストールしたい APK がたくさんある場合は、ADB の install-multiple そして install-multi-package 特徴。

すべての APK が 1 つのアプリ用である場合は、次を使用します install-multiple:

adbinstall-multipleapk1.apkapk2.apk ...

それ以外の場合は、使用します install-multi-package:

adbinstall-multi-packageapp1.apkapp2.apk ...

これらのコマンドのオプションは次のようになります。 installただし、いくつかの制限があります。 利用可能なオプションについては、ADB の組み込みドキュメントを確認してください。

アプリのアンインストール

ADB を使用してアンインストールするには、アンインストールするアプリのパッケージ名が必要です。 のセクションをチェックしてください インストールされているアプリの一覧表示 まだ行っていない場合は。

パッケージ名を取得したら、アンインストールは次のように簡単です。

adb uninstall <packagename>

通常、このコマンドを使用してシステム アプリやプレインストールされたアプリをアンインストールすることはできません。 ただし、ADB を使用してそれらを無効にできる場合があります。 セクションをチェックしてください ほぼすべてのアプリの無効化と有効化 詳細については。

ADB を使用した APK の抽出

アプリの APK を抽出する理由はたくさんあります。 将来使用するためにバックアップしたい場合や、オンラインで入手できなくなったので別のデバイスに転送したい場合もあります。

ADB を使用してアプリを抽出するのは非常に簡単です。 まず、抽出するアプリのパッケージ名を見つけます。 これを行うには複数の方法がありますが、通常、最も簡単なのは、デバイスの設定アプリを使用して インストールされているすべてのアプリのリストから目的のアプリを選択し、パッケージ名またはアプリが見つかるまで下にスクロールします。 ID。

パッケージ名を取得したら、次のコマンドを実行します。

adb shell pm path <packagename>

このコマンドは、そのパッケージ名のすべての APK のパスを返します。

次に、次のコマンドを使用して、各 APK をコンピューターにプルできます。

adb pull /path/to/apk.apk

アプリケーションデータのバックアップと復元

Google は iOS 風のワンクリック バックアップ方法をまだ考案していませんが、ADB を使用して、インストールされているアプリとそのデータをバックアップおよび復元できます。 ただし、機能は完璧とは程遠く、Google はすでに 機能を非推奨としてマークしました.

バックアップ

単一のアプリケーションをその APK とともにバックアップするには:

adb backup -apk <packagename> -f package_name_backup.ab

すべてのアプリデータを一度にバックアップしたい場合:

adb backup -f all -all -apk -nosystem

復元モジュールは個々のアプリ固有の復元を実行できないため、パッケージ固有のバックアップを作成することをお勧めします。 次のコマンド スニペット (Linux/macOS および Windows Subsystem for Linux と互換性があります) でこれを行うことができます。

for APP in $(adb shell pm list packages -3)
do
APP=$( echo${APP} | sed "s/^package://")
adb backup -f ${APP}.backup ${APP}
done

復元する

まず、保存した APK をインストールする必要があります。

adb install <packagename>.apk

その後、そのデータを復元できます。

adbrestorepackage_name_backup.ab

繰り返しになりますが、ADB のバックアップおよび復元機能には、ROM に応じて結果が変わるなど、複数の注意事項があります。

アプリコンポーネントのリスト表示

アプリのコンポーネントは、アクティビティ、BroadcastReceivers、サービスなどです。 特定のアプリのこれらのコンポーネントの名前を知っていると便利な場合があります。特に、非表示のアクティビティを起動したり、特定のデータを含むブロードキャストを送信したりする場合に便利です。

残念ながら、ADB にはアプリのコンポーネントを一覧表示する非常にクリーンな方法がありません。 しかし、それは可能です。 次のコマンドを実行します。

adb shell dumpsys package

大量のテキストが返されます。

  • 見つかるまでスクロールします。 アクティビティリゾルバーテーブル タイトルをクリックするとアクティビティが表示されます。
  • 下を見てください レシーバーリゾルバーテーブル ブロードキャストレシーバー用。
  • チェックしてください サービスリゾルバーテーブル サービス用。
  • 等々。

各コンポーネントには、その起動に必要なアクション、コンポーネントの名前、および場合によっては追加情報が表示されます。

あるいは、アクティビティ、サービス、レシーバーを簡単に確認する方法が必要な場合は、XDA Recognized Developer の Root Activity Launcher アプリを使用できます。 ザカリー1. 各アプリのコンポーネントとその他の便利な機能が表示されます。

ルートアクティビティランチャー開発者: ザカリー・ワンダー

価格: 0.99。

ダウンロード

アクティビティ、サービス、放送受信機の立ち上げ

ADB は、アクティビティの起動、サービスの開始、および BroadcastReceiver への通知にも使用できます。 必要に応じて、データ URI やインテント エクストラを指定することもできます。

コンポーネントを起動するには、起動するコンポーネントの名前が必要です。 それを取得する方法は、 アプリコンポーネントの一覧表示 セクション。

アクティビティを起動するためのコマンド構文は次のようになります。

am start -a <action> -n <component>

サービスを開始するためのコマンド構文は次のようになります。

am startservice -a <action> -n <component>

BroadcastReceiver に通知するためのコマンド構文は次のようになります。

am broadcast -a <action> -n <component>

ほとんどの場合、アクティビティとサービスの場合、アクションを明示的に指定する必要はありません。 通常、コンポーネントが他のものを使用する場合にのみ必要になります。 android.intent.action. 主要.

基本的な構文に加えて、渡すデータをさらに指定する方法を次に示します。 一般に、すべてのデータ値は二重引用符で囲む必要があります。

  • -d データ URI を指定できます。
  • -e または --es 追加の文字列を指定できます。
  • --esn 追加で null 文字列を指定できます。
  • --ez ブール値のエクストラを指定するために使用されます。
  • --ei 整数の追加を指定するために使用されます。
  • --エル 長いエクストラを指定するためのものです。
  • --ef 余分なフロートを渡します。
  • - 欧州連合 追加の URI を渡します。
  • --ecn 追加のコンポーネント名を指定するために使用できます。
  • --エイア ,,... 値を Integer[] エクストラとして渡します。
  • --エイル ,,... 値をリストとして渡します.
  • 同じ配列およびリスト引数は、long、float、および String に対しても機能します。 を交換するだけです 適切な文字を添えて。
  • -f フラグを指定できます。

使用できる動作オプションはさらに多くあるため、詳細については組み込みのドキュメントを確認してください。

ほぼすべてのアプリの無効化と有効化

Android のシステム アプリはアンインストールできません。また、残念ながら、その多くは設定から​​無効にすることもできません。 ADB ではこれらをアンインストールできませんが、無効にするのに役立つ場合があります。

まず、無効にするアプリのパッケージ名を必ず取得してください。 次に、これらのコマンドを試してください。 どれかが失敗した場合は、次のオプションを試してください。

  • 午後無効にする
    • 再度有効にするには、次を使用します 午後有効にする
  • pm 無効ユーザー --user 0
    • 再度有効にするには、次を使用します 午後有効にする
  • 午後は隠す
    • 再度有効にするには、次を使用します 午後 再表示
  • 午後サスペンド
    • 再度有効にするには、次を使用します 午後一時停止を解除
  • pm アンインストール -k --user 0
    • 再度有効にするには、次を使用します pm インストール-既存
      • これにより、ユーザー プロファイルからアプリケーションが効果的にアンインストールされます。 再度有効にするコマンドの間 すべき うまくいきますが、うまくいく保証はありません。 アプリを復元するには出荷時設定にリセットする必要がある場合があります。
      • デバイスで複数のユーザー プロファイルを使用している場合は、上記のコマンドの 0 を実際のユーザー ID に置き換えてください。

詳細については、チュートリアルをご覧ください。 root アクセスなしでキャリアおよび OEM ブロートウェアをアンインストールする方法.

スクリーンショットのキャプチャ

ほとんどの Android ROM には、スクリーンショットを撮るためと画面アクティビティを記録するための、screencap と screenrecord という 2 つの便利なシェル ユーティリティが用意されています。 ADB シェルから直接呼び出して、電話画面の静的なスクリーンショットまたはビデオ スニペットをキャプチャし、デバイスの内部ストレージに直接保存できます。

スクリーンショットをキャプチャするための構文は非常に簡単です。

adb shell screencap /sdcard/screenshot.png

同様に、動的なスクリーングラブを取得する必要がある場合は、次の手順を実行します。

adb shell screenrecord /sdcard/recording.mp4

ご想像のとおり、screencap ツールはかなりシンプルですが、screenrecord ユーティリティはいくつかのパラメーターを提供します。 後者のオプションは次のとおりです。

  • --サイズ 幅×高さ
    • 動画ファイルの解像度を設定します(例:「1280x720」)。 デフォルトでは、ターゲット デバイスのメイン ディスプレイ解像度 (サポートされている場合) を取得しようとし、サポートされていない場合は 1280x720 に戻ります。
  • --ビットレート RATE
    • ビデオのビットレートをビット/秒で設定します。 値はビットまたはメガビットとして指定できます。 「4000000」は「4M」に相当します。
  • --バグレポート
    • バグを説明するのに役立つタイムスタンプ オーバーレイなどの追加情報を追加できます。
  • --制限時間 TIME
    • 最大録音時間を秒単位で設定します。 デフォルト/最大値は 180 です。
  • --display-id ID
    • 記録する物理ディスプレイ ID を指定します。 デフォルトはプライマリ ディスプレイに設定されています。 有効なディスプレイ ID については、「dumpsys SurfaceFlinger --display-id」を参照してください。
  • --冗長
    • 録音セッションに関する詳細な情報を表示します。

Android の組み込み画面キャプチャ ユーティリティの機能をさらに拡張するには、次のようにします。 スクシーピー. これは、ADB の機能を活用したオープンソースの画面ミラーリング ソリューションです。

PCとAndroidデバイス間でバイナリデータを転送する

本格的な ADB シェルを生成したくないが、ホスト PC とターゲット Android デバイスの間でバイナリ データの効率的なパススルーを組み込みたい場合は、 exec-in そして exec-out コマンド。

彼らにもかかわらず、 長く存在する、exec-in および exec-out コマンドはまだ文書化されていません。 異なるシェルによる入力と出力の処理方法が原因で、ファイルの破損が発生する可能性があります。 慎重に使用してください。

1 つ目は、Android でコマンドを実行し、フィルターされていないコンソール入力をパラメーターとして入力するのに役立ちます。 2 つ目はまったく逆のことを行います。つまり、Android 上でコマンドを実行し、ホスト OS によってフィルターされていないバイナリ出力をキャプチャします。

例:

adb exec-out "screencap -p" > "D:\screenshot.png"

これは、 screencap Android のコマンドを使用して携帯電話のディスプレイのスクリーンショットをキャプチャしますが、それはホスト PC の D: パーティションに Screenshot.png として直接保存されます (Windows を実行している場合)。 一方で、

adb exec-in"cd /sdcard && tar -xf -" < "D:\backup.tar"

これにより、Android デバイスの内部ストレージのルートにあるホスト PC (Windows を実行している) の D: パーティションに保存されているbackup.tar ファイルの内容が抽出されます。


ADB は非常に強力なツールであり、上記の機能以外にもさまざまなことができます。 この記事のコマンドは単なる出発点として役立ちます。 より高度な使用法については、次のようなコマンドを確認してください。 cmd -l 操作できる可能性のあるさまざまなサービスを確認したり、 ls -l /システム/bin Android ROM で利用可能なさまざまなコマンド実行可能ファイルを確認します。

その他の Android のトリップとティックについては、次のガイドをご覧ください。 Androidスマートフォンをroot化する方法, TWRPリカバリのインストール方法、 そして Android デバイスにカスタム ROM をインストールする方法.