ByteScope

getprop

読み取りのみ

システムプロパティを表示します。端末自身が語る「これは何か」です。

コマンド
adb shell getprop
コマンド
システムとログ
リスク
読み取りのみ

構文

getprop [-T | -Z] [<name> [<default>]]

フラグと引数

トークン意味
<name>プロパティ 1 つの値を、括弧なしで単独で印字します。2 つめの位置引数はフォールバックで、`getprop ro.nope missing` は `missing` を印字します。省略するとフォールバックは空文字列なので、綴りを間違えたプロパティ名は空行を印字して 0 で終了します。このコマンドで唯一、成功とまったく同じ見た目をする失敗です。`-T` と `-Z` は値をプロパティの型や SELinux のコンテキストに差し替えるもので、互いに排他です。どちらも名前を取ることも全部を並べることもでき、どちらも、素の値の形が触れもしないプロパティ情報ファイルを必要とします。

使用例

  • getprop

    全部。最近の端末では 1000 件を超えます。

  • getprop ro.product.model

    値を 1 つ、飾りなしで。

  • getprop ro.build.version.sdk

    API レベル。この Android がどれだけ古いかを尋ねる正直な方法です。

出力の読み方

出力例

[ro.product.model]: [Pixel 7]
[ro.build.version.sdk]: [34]

引数なしなら 1 プロパティ 1 行の `[key]: [value]` が key 順に並びます。`PrintAllProperties` はすべてのプロパティを集めて対を並べ替え、それから初めて印字するので、画面上の順序は並べ替えの順序であって、システムが設定した順序ではありません。値そのものに閉じ括弧が入り得るので、括弧で分割するのではなく `]: [` という区切りと行末の括弧に頼ってください。名前を渡すと、値だけが key も括弧も引用符もなしに 1 行で印字されます。`getprop ro.build.version.sdk` をスクリプトで数値と比較しても安全なのはそのおかげで、空の答えと空の値が見分けられないのも同じ理由です。

出力フィールド

フィールド意味
ro.product.model販売上の機種名。
ro.product.manufacturer製造元。
ro.build.version.release人が目にする形の Android バージョン。
ro.build.version.sdkAPI レベル。どうしても分岐するなら、分岐すべき数値はこれです。
ro.build.fingerprintビルドの同一性を 1 つの文字列にまとめたもの。
ro.serialnoシリアル番号。ビルドがまだ露出させている場合。

必要な権限

root も `adb root` も、そしてこのリファレンスには珍しく `system_server` すら不要です。`getprop` はプラットフォーム自身の toolbox にある素のバイナリ(`system/core/toolbox/getprop.cpp`)で、`pm` や `input` のように動いているサービスへ入り込む形ではありません。共有のプロパティ領域を直接読むので、端末がまだ起動中でも binder が詰まっていても答え続けます。`dumpsys` や `cmd` の呼び出しがサービスを見つけられないと言ってきた直後に、まず走らせる価値があるのはそのためです。できるのは読むことだけで、書く形はここにありません。プロパティを変えるのは `setprop`、アクセスの問いに別の答えを持つ別のコマンドです。`shell` ユーザーが何を見てよいかはプラットフォームがプロパティごとに決めるので、このページは特定のプロパティが存在するとは主張しません。正直な確かめ方は、尋ねてみることです。

エラーメッセージの読み解き

メッセージ意味
getprop: Max 2 arguments (see "getprop --help")名前とフォールバックより多くのものが届きました。ほとんどの場合、`getprop` が見る前にシェルが、引用していない引数を空白で割っています。値を引用するか、上の行から紛れ込んだ語が生き残っていないかを確認してください。
Only one of -T or -Z may be specified両方のフラグが渡されました。プロパティには型もコンテキストもありますが、このコマンドが印字する列は 1 つなので、勝手に選ばずに断ります。2 回走らせてください。
Unable to load property info file`-T` と `-Z` が答えの元にしているプロパティ情報を読み込めず、`getprop` は何も印字せずに戻ります。素の値の形はそのファイルをまったく読まないので、フラグを落とせば値は返ってきます。

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

  • key の重複はあり得ます。最後に印字された値が有効なものです。
  • `ro.` のプロパティは起動後は読み取り専用です。それ以外は見ている間に変わり得るので、1 分離れた 2 回の読みが正当に食い違うことがあります。
  • メーカーはプロパティを自由に追加・削除します。あるものがないことは、ハードウェアについての証拠にはなりません。

これには UI があります

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

Android ADB Toolbox を開く

関連コマンド

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

コマンド何をするか
settings get端末の設定プロバイダから値を 1 つ読みます。
dumpsys batteryバッテリーサービスの現在の状態:残量、充電状態、健康度、電圧、温度。
top1 回分のプロセス表:CPU 使用率、メモリ、状態、コマンドライン。

他のシステムとログコマンド

コマンド何をするか
logcatシステムログを流し読みします。端末で起きていることすべての実況です。
run-asあるアプリ自身の uid でコマンドを実行します。root なしで debuggable ビルドのプライベートファイルを読む方法です。

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 経由で実行します。あるいは全コマンドを見る。