ByteScope

adb shell コマンドリファレンス

知っておく価値のある adb shell コマンドを 1 コマンド 1 ページで。構文、例、出力の読み方、そしてどのツールが代わりに実行してくれるか。

すべてブラウザの中で動くので、何もアップロードされません。

← Web ADB Toolkit に戻る

1 コマンド 1 ページ。構文、写して使える例、出力が何を意味するかのフィールド単位の説明、そしてそれを代わりに実行してくれるこのサイトのツールへのリンク。

自分の機械からなら頭に adb shell を付けて、端末側のシェルならそのまま打ってください。

パッケージ(pm)

アクティビティと intent(am)

システムサービス(dumpsys)

設定プロバイダ

入力とタッチ

画面と取り込み

ファイルとストレージ

システムとログ

このツールについて

USB ケーブル越しに実際に手が伸びるコマンドのリファレンスです。パッケージマネージャ、アクティビティマネージャ、ダンプする価値のある dumpsys サービス、設定プロバイダ、入力と画面のコマンド、そして Android が積んでいる少数のシェルツール。1 コマンド 1 ページで、構文、教科書的でない 2〜4 個の例、出力が何を意味するかのフィールド単位の説明、そして該当するものがあれば、そのコマンドを実行して応答を解析してくれるこのサイトのブラウザツールへのリンクを載せています。

なぜもう 1 つ adb リファレンスを作るのか

多くがヘルプテキストの書き写しだからです。ヘルプテキストは、Android の du がファイルサイズではなく切り上げた 1024 バイトブロックを数えることも、df -h と df -H が出力から見分けられないことも、Android 12 では pm clear --cache-only がアプリ全体を消すことも、getevent の tracking id が ffffffff なら指が離れたという意味だということも、dumpsys battery の温度が 10 分の 1 度なのに dumpsys thermalservice は素の浮動小数点だということも教えてくれません。どれも、もっともらしくて間違った答えを生む種類の間違いで、そのすべてが該当ページに書いてあります。Web ADB ツール群のパーサを書いている最中に踏んだからです。

Android のシェルツールは GNU ではなく toybox

top、df、du、find は toybox の実装で、toybox のソースではなく GNU の man ページを読むことが、これらを取り違えるいちばん確実な方法です。find -size +100 は 100 バイトでも 100 MB でもありません。top のソート対象の列は角括弧で囲まれ、その括弧は隣の列にくっつきます。TIME+ は総分数を数えるので、CPU 時間 2 時間は 120:00.00 と出ます。この 4 つのページには、実際にコードにある挙動と、曖昧さを消すために付けるべきフラグを書いています。

破壊的なコマンドには印と、戻る道がついています

端末を変えるコマンドには等級と、取り消す正確なコマンドを名指しする段落が付いています。pm uninstall -k --user 0 は cmd package install-existing で、pm disable-user は pm enable で、wm size と wm density はそれぞれの reset で、settings put は書く前に読んだ値でだけ戻せます。戻る道がまったくないコマンドが 3 つあります。--cache-only なしの pm clear、rm、そして -k なしのアンインストールです。それらのページは脚注ではなく最初の段落にそう書いています。Android にゴミ箱はありません。

各ページは、該当するツールがあればそこへのリンクも載せています。パッケージ系のコマンドは debloat ツール、du・df・find・diskstats はストレージ分析、dumpsys battery は電池のページ、getevent はセンサーテスターです。私たちのツールがそのコマンドを実行していない場合は、リンクを捏造せず何も書きません。誇張するリファレンスは、そのうち信用されなくなるからです。

よくある質問

これらのコマンドに root は必要ですか?

ほとんど必要ありません。このリファレンスにあるものは shell ユーザー(uid 2000)として動きます。開発者向けオプションと USB デバッグを有効にした端末で adb shell が与えてくれる権限です。このユーザーは自分の Android ユーザー向けにパッケージを列挙・削除でき、ほとんどの dumpsys サービスを読み、設定プロバイダに書き、入力を注入し、画面を取り込み、共有ストレージを読めます。できないのは他のアプリのプライベートデータを読むこと(例外は debuggable で出荷されたアプリに対する run-as だけ)と /data/anr に触ることで、だからクラッシュのページは代わりに dumpsys dropbox を使います。

同じコマンドが自分の端末で違う挙動をするのはなぜ?

理由は 2 つあって、このリファレンスはそれを区別しようとしています。片方は調べればわかるバージョン依存です。pm list packages の -U は Android 8.0、--cache-only は Android 13、find -printf は Android 11 から。もう片方はメーカーによる改変で、いちばん痛いのが dumpsys です。ダンプのテキストはサービスの作者が最後にそう書きたかった内容そのもので、メーカーはそれを変えるうえに自分の変更をバックポートします。その状況にあたる箇所は、1 つの形を正統だと装わずに「形式は変わる」と書いています。

これらのコマンドをそのまま端末に貼っても安全ですか?

読み取り専用のものは安全です。端末を変えると書かれているものは、まず隣の段落を読んでください。何が変わり、どのコマンドで戻せるかが書いてあります。習慣を 2 つ持つとほとんど解決します。パスと URL は必ずシングルクォートで囲むこと(空白や引用しない & はシェルが実行するものを変えます)。そして 1 コマンドにワイルドカードではなく 1 つの正確な対象を渡すこと。そうすれば間違いの代価がディレクトリツリーではなくファイル 1 つになります。

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

多くはできます。このサイトの Web ADB ツール群は、Chromium 系のデスクトップブラウザから WebUSB で端末と話します。SDK のインストールは不要で、どこにも何もアップロードしません。ここのページは、説明しているコマンドを実行するツールへリンクしています。制限は正直なものです。WebUSB は Chromium 系かつデスクトップのみ、ADB インターフェイスを保持できるプログラムは同時に 1 つだけ(なのでデスクトップの adb server は先に止める必要があります)、そして adb forward と adb reverse はブラウザでは不可能です。ウェブページは TCP のリスナーを開けません。