ByteScope

dumpsys package

読み取りのみ

パッケージマネージャが知っているすべて:バージョン、パス、flags、インストール元、ユーザーごとの状態。

コマンド
adb shell dumpsys package
コマンド
システムサービス(dumpsys)
リスク
読み取りのみ

構文

dumpsys package [<package>]

フラグと引数

トークン意味
<package>ダンプを 1 パッケージに絞ります。それでもリゾルバの表は印字され、そこには他のパッケージも出てきます。

使用例

出力の読み方

出力例

Packages:
  Package [com.example] (a1b2c3d):
    appId=10234
    codePath=/data/app/~~kO7bJ9w==/com.example-Ay8s2Q==
    versionCode=4711 minSdk=24 targetSdk=34
    versionName=1.2.3
    flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ]
    lastUpdateTime=2024-03-14 12:34:56
    installerPackageName=com.android.vending
    User 0: ceDataInode=1234 installed=true hidden=false stopped=false enabled=0

`Package [名前]` ブロックの中に字下げされた `key=value` が並び、その後に Android ユーザーごとの `User N:` 行が続きます。パッケージは正当に 2 回現れ得ます。更新されたシステムアプリは `Packages:` の下に現行のブロックを、`Hidden system packages:` の下に工場出荷時のコピーを持ち、後に来た方を読むと出荷時のバージョンをインストール済みとして報告してしまいます。その 2 つ目のブロックが存在すること自体が「これは更新済みシステムアプリ」を示す最も確実な合図です。

出力フィールド

フィールド意味
versionCode / versionNameインストール済みのバージョン。整数と表示用の文字列。
codePathAPK セットの場所。
flags=[ … ]アプリケーションの flags。debloat の判断が懸かるのは `SYSTEM` です。
installerPackageNameインストールした主体。プリインストールアプリでは `null` という 4 文字。
firstInstallTime / lastUpdateTime端末自身のタイムゾーンでの壁時計。オフセットは印字されません。
User N: … enabled=0 default、1 enabled、2 disabled、3 ユーザーによる無効、4 使うまで無効。

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

これには UI があります

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

Android Debloat Tool を開く

関連コマンド

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

コマンド何をするか
pm list packagesインストール済みパッケージを一覧表示します。APK パス、uid、バージョンコード、インストーラも同時に取得できます。
pm pathインストール済みパッケージを構成する APK ファイルの絶対パスを表示します。
pm disable-userパッケージを削除せずに、指定した Android ユーザーで無効にします。アンインストールより安全で、確実に戻せます。
pm uninstallパッケージを削除します。ユーザー単位の削除なら、root なしでプリインストールアプリを片付けられます。

他のシステムサービス(dumpsys)コマンド

コマンド何をするか
dumpsys batteryバッテリーサービスの現在の状態:残量、充電状態、健康度、電圧、温度。
dumpsys diskstatsパーティションごとの空き容量、ディスク書き込み遅延の実測、そしてキャッシュされたアプリ別の使用量内訳。
dumpsys thermalservice端末が発熱で性能を絞っているか、そしてハードウェア層が報告する各温度ゾーンを摂氏で表示します。
dumpsys sensorservice端末にあるすべてのセンサーとそのベンダー、type、レート、バッチング。加えて直近の測定値のバッファ。
dumpsys meminfoどのプロセスがメモリを最も使っているかを、PSS(比例配分したサイズ)で表示します。
dumpsys activity activitiesいまどのアプリが前面にいるか、そしてその背後のタスクとスタックの構造。
dumpsys dropboxクラッシュ、ANR、tombstone を保持するプラットフォームのリングバッファ。root なしで ANR トレースを読む方法です。

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