getprop
唯讀印出系統屬性——手機自己對「這是什麼」的回答。
- 指令
- adb shell getprop
- 指令
- 系統與紀錄
- 風險
- 唯讀
語法
getprop [-T | -Z] [<name> [<default>]]旗標與參數
| token | 意義 |
|---|---|
| <name> | 單獨印出一個屬性的值,不帶方括號。第二個位置參數是備援值:`getprop ro.nope missing` 會印出 `missing`。不寫的話備援值是空字串,所以一個打錯的屬性名稱會印出一行空白然後以 0 結束——這是這個指令唯一一種長得和成功一模一樣的失敗。`-T` 與 `-Z` 會把值換成屬性的型別或它的 SELinux context,兩者互斥;它們都接受一個名稱、也都可以整個列出來,而且都需要那個純粹讀值的形式從來不碰的屬性資訊檔。 |
範例
getprop全部。在新一點的手機上超過一千筆。
getprop ro.product.model只要一個值,不帶裝飾。
getprop ro.build.version.sdkAPI 級別,這是詢問「這個 Android 多舊」比較誠實的方法。
輸出怎麼讀
輸出範例
[ro.product.model]: [Pixel 7]
[ro.build.version.sdk]: [34]不給參數時,一個屬性一行 `[key]: [value]`,而且是照 key 排序的——`PrintAllProperties` 會先收集每一個屬性、把配對排好,然後才印,所以畫面上的順序是排序後的順序,不是系統設定它們的順序。值本身可能含右方括號,所以請靠 `]: [` 這個分隔符號與行尾那個括號來定位,而不是拿括號去切。給了名稱時,值會單獨印在一行上,沒有 key、沒有方括號、也沒有引號——這正是 `getprop ro.build.version.sdk` 可以在腳本裡安心拿去和數字比較的原因,同時也正是「空答案」和「值本身是空的」分不出來的原因。
輸出欄位
| 欄位 | 意義 |
|---|---|
| ro.product.model | 行銷用的機型名稱。 |
| ro.product.manufacturer | 製造商。 |
| ro.build.version.release | 使用者看到的那種 Android 版本。 |
| ro.build.version.sdk | API 級別。如果非要分支,該拿來分支的數字是這個。 |
| ro.build.fingerprint | 把整個建置身分寫成一個字串。 |
| 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` 看到它之前,shell 就先把一個沒加引號的參數照空白切開了——把值加上引號,或者檢查上一行是不是有個字多活了下來。 |
| Only one of -T or -Z may be specified | 兩個旗標都給了。一個屬性有型別、也有 context,但這個指令只印一欄,所以它拒絕而不是替你挑。跑兩次。 |
| Unable to load property info file | `-T` 與 `-Z` 用來回答的那份屬性資訊載入不了,`getprop` 什麼都沒印就回來了。純粹讀值的形式根本不會去讀那個檔案,所以把旗標拿掉,值照樣回得來。 |
版本與廠商注意事項
- key 是可能重複的,最後印出來的那個值才有效。
- `ro.` 開頭的屬性在開機後是唯讀的。其餘的可能在你看的時候就變了,所以相隔一分鐘的兩次讀取合理地不一致。
- 廠商會自由地增減屬性。某個屬性不存在,不能當成關於硬體的證據。
這個我們有 UI
Android ADB Toolbox 會透過 USB 執行這個指令並解析回應——只要 Chromium 系瀏覽器,不必安裝 SDK,也不會上傳任何東西。
相關指令
和 getprop 會在同一次作業裡出現的指令。
| 指令 | 做什麼 |
|---|---|
| settings get | 從手機的設定提供者讀出一個值。 |
| dumpsys battery | 電池服務目前的狀態:電量、充電狀態、健康度、電壓與溫度。 |
| top | 一次性的行程表:CPU 占用、記憶體、狀態與指令列。 |
其他系統與紀錄指令
這些行為是在撰寫 Web ADB 工具背後的解析程式時,對照 AOSP、toybox 與核心原始碼查證的。真的會因 Android 版本或廠牌而異的地方,這一頁會直接說明,而不是給你一個在半數手機上都是錯的數字。