ByteScope

am start

読み取りのみ

コンポーネント指定または intent 指定でアクティビティを起動します。ディープリンクの解決を確かめる最短経路です。

コマンド
adb shell am start
コマンド
アクティビティと intent(am)
リスク
読み取りのみ

構文

am start [-W] [-a <action>] [-d <data URI>] [-n <package>/<activity>] [<extras>]

フラグと引数

トークン意味
-W起動の完了を待ち、ステータスと所要時間を表示します。
-a <action>intent の action。例:`android.intent.action.VIEW`。
-d <uri>intent の data URI。スキームは必須です。なければ intent フィルタと突き合わせる相手がありません。
-n <pkg>/<activity>コンポーネントを 1 つ直接起動し、intent 解決を飛ばします。

使用例

出力の読み方

出力例

Starting: Intent { act=android.intent.action.VIEW dat=https://example.com/ flg=0x10000000 }
Status: ok
LaunchState: COLD
Activity: com.example/.MainActivity
TotalTime: 245
WaitTime: 262
Complete

`-W` を付けると、プラットフォームが解釈した intent と結果が出ます。面白い失敗はステータス行ではありません。`Error: Activity not started, unable to resolve Intent { … }` は誰も名乗り出ないスキームの姿で、`Warning: Activity not started, its current task has been brought to the front` は注釈付きの成功です。アプリが既に開いていたので何もコールドスタートせず、時間も出ません。

出力フィールド

フィールド意味
Status: okアクティビティが起動しました。
LaunchStateCOLD / WARM / HOT。アプリがどれだけ生きていたか。
Activityintent を獲得したコンポーネント。
TotalTimeアクティビティが描画されるまでのミリ秒。何も起動しなかった場合は出ません。
WaitTime呼び出し側が待たされた時間を含むミリ秒。
Error: … unable to resolve Intentその intent を名乗る相手が端末上にいません。試したかったのがまさにこれ、という場合も多いです。

バージョンとメーカーに関する注意

これには UI があります

Android ADB Toolbox はこのコマンドを USB 経由で実行し、返ってきたものを解析します。Chromium 系ブラウザだけで、SDK も不要、どこにもアップロードしません。

Android ADB Toolbox を開く

関連コマンド

am start と同じ作業で出てくるコマンド。

コマンド何をするか
am broadcastブロードキャスト intent を送ります。SystemUI の demo mode などプラットフォームのレシーバをシェルから動かす方法です。
am force-stopあるアプリのプロセスとサービスをすべて終了させます。
dumpsys activity activitiesいまどのアプリが前面にいるか、そしてその背後のタスクとスタックの構造。

Web ADB ツール群のパーサを書きながら、AOSP・toybox・カーネルのソースに突き合わせて確認しています。バージョンやメーカーで本当に挙動が変わるところは、世界の半分の端末で間違いになる数値を出す代わりに、そう書いてあります。

よくある質問

adb shell のコマンドはどう実行しますか?

端末で開発者向けオプションと USB デバッグを有効にし、ケーブルを繋いだうえで、platform-tools を入れた機械から `adb shell <コマンド>` を実行します。`adb shell` だけを実行すれば対話プロンプトが出て、接頭辞なしで打てます。スクリーンショットのようにバイナリを出力するコマンドでは `adb shell` ではなく `adb exec-out` を使ってください。素のシェルサービスは端末を割り当て、それが改行のバイトを書き換えてデータを壊します。

adb shell のコマンドに root は必要ですか?

このリファレンスにあるものには不要です。すべて `shell` ユーザーとして動き、自分の Android ユーザー向けのパッケージ管理、ほとんどの `dumpsys` サービスの読み取り、設定プロバイダへの書き込み、入力の注入、共有ストレージの読み取りができます。root が必要なのはこのリファレンスがあえて避けていること、つまり他のアプリのプライベートデータの読み取り(debuggable なビルドに対する `run-as` を除く)、システムパーティションへの書き込み、`/data/anr` の直接読み取りです。

自分の端末では出力が違って見えるのはなぜ?

Android のバージョンか、メーカーのどちらかです。一部のフラグやフィールドは特定のリリースから入ったもので、それはコマンドごとに注記しています。残りはメーカーによる改変で、いちばん影響が大きいのは `dumpsys` です。ダンプはデバッグ出力で、そのテキストはサービスの作者が最後に印字した内容そのもの、しかもメーカーはそれを変えて自分の変更をバックポートします。フィールドは位置ではなく名前で読み、見慣れない形は失敗ではなく差分として扱ってください。

端末ではなくブラウザから実行できますか?

多くのコマンドは可能です。このサイトの Web ADB ツール群は、Chromium 系のデスクトップブラウザから WebUSB で端末と話し、SDK のインストールも不要、どこにもアップロードしません。各ページは、該当するツールがあればそこへリンクしています。知っておく価値のある制限が 2 つあります。ADB インターフェイスを保持できるプログラムは同時に 1 つだけなので、デスクトップの `adb server` は先に止める必要があります。そして `adb forward` と `adb reverse` はブラウザでは一切動きません。

打つより押したい場合は、Web ADB Toolkit がこの種のコマンドをブラウザから USB 経由で実行します。あるいは全コマンドを見る