1629. 按鍵持續時間最長的鍵
1620
2025-04-01
理解概念
1、基本描述
系統屬性可以簡單的理解為系統層級的全局變量,以key-value的形式保存, key-value 都是字符串。這些屬性可能是有些資源的使用狀態,進程的執行狀態,系統的特有屬性等。
2、命名規則
幾種特殊前綴的屬性
ro :只讀屬性,不能修改。
persist :修改屬性后,重啟依然有效。數據會保存到 /data/property 目錄。其他前綴的屬性被設置后,只是保存在內在中而已,并沒有保存到磁盤,所以重啟后就恢復默認值了。
ctrl :用來啟動和停止服務。每一項服務必須在 init.rc 中定義。init 一旦收到設置 ctrl.start 屬性的請求,屬性服務將使用該屬性值作為服務名找到該服務,啟動該服務。這項服務的啟動結果將會放入 init.svc.<服務名> 屬性中。
3、讀寫方法
在 Android 系統中有一個 Property Service 服務, 這個服務對外提供了兩個接口:
SystemProperties.get(String key, String def) # 讀取系統屬性 SystemProperties.set(String key, String val) # 設置系統屬性
1
2
有兩個命令行對這兩個接口進行了封裝,我們可以直接在adb shell 中輸入:
getprop key # 讀取系統屬性 setprop key val # 設置系統屬性
1
2
4、組織結構
系統啟動的時候會從幾個配置文件中加載屬性的默認值,大概有以下幾個文件, 在不同Android版本系統上可能不一樣:
/default.prop 或者是 /prop.default, /vendor/default.prop /system/build.prop /vendor/build.prop /data/local.prop /data/property/*
1
2
3
4
5
6
系統會按先后順序依次加載以上文件,后加載的屬性將覆蓋原先的值。
default.prop 的值是通過 build/tools 目錄下的 buildinfo.sh 和 vendor_buildinfo.sh 生成的。
源碼中添加系統屬性定義
在我們之前配置的product中添加自定義屬性,在源碼根目錄device/mi/pure下,對應Build規則在build/make/core/Makefile,編譯后輸出到out/target/product/pure下,最終隨系統啟動加載對應的文件。
下面記錄了添加屬性過程
1、添加到/system/build.prop
hinzer@ubuntu:pure$ pwd /home/hinzer/source/android-10/device/mi/pure hinzer@ubuntu:pure$ cat system.prop ro.pure.version=1.0 # 定義屬性 hinzer@ubuntu:pure$ cat BoardConfig.mk include $(SRC_TARGET_DIR)/board/generic_x86_64/BoardConfig.mk TARGET_SYSTEM_PROP += device/mi/pure/system.prop # 添加到 TARGET_SYSTEM_PROP 變量
1
2
3
4
5
6
7
8
2、添加到/vendor/build.prop
hinzer@ubuntu:pure$ pwd /home/hinzer/source/android-10/device/mi/pure hinzer@ubuntu:pure$ cat product01.mk $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_x86_64.mk) PRODUCT_NAME := product01 # product名(與文件保持一致) PRODUCT_DEVICE := pure # device名,BoardConfig.mk相關 # 配置屬性 PRODUCT_PROPERTY_OVERRIDES += \ ro.vendor.pure.name=qiushao \ persist.vendor.pure.name=qiushao \ vendor.pure.name=qiushao
1
2
3
4
5
6
7
8
9
10
11
12
13
14
編譯
hinzer@ubuntu:android-10$ source ./build/envsetup.sh hinzer@ubuntu:android-10$ lunch product01-eng hinzer@ubuntu:android-10$ make -j4
1
2
3
驗證
1、查看out/target目錄
# 驗證 `/system/build.prop` hinzer@ubuntu:android-10$ cat out/target/product/pure/system/build.prop | grep ro.pure ro.pure.version=1.0 # 驗證 `/vendor/build.prop` hinzer@ubuntu:android-10$ cat out/target/product/pure/vendor/build.prop | grep pure.name ro.vendor.pure.name=qiushao persist.vendor.pure.name=qiushao vendor.pure.name=qiushao
1
2
3
4
5
6
7
8
9
2、啟動虛擬機系統查看屬性
hinzer@ubuntu:android-10$ emulator hinzer@ubuntu:android-10$ adb devices List of devices attached emulator-5554 device hinzer@ubuntu:android-10$ adb reboot # 重啟一下,重置系統屬性 hinzer@ubuntu:android-10$ adb shell getprop ro.pure.version 1.0 hinzer@ubuntu:android-10$ adb shell getprop ro.vendor.pure.name qiushao hinzer@ubuntu:android-10$ adb shell getprop persist.vendor.pure.name qiushao # 只讀屬性不可改 hinzer@ubuntu:android-10$ adb shell getprop ro.vendor.pure.name qiushao hinzer@ubuntu:android-10$ adb shell setprop ro.vendor.pure.name hinzer setprop: failed to set property 'ro.vendor.pure.name' to 'hinzer' # 修改屬性,重啟后恢復原屬性值 hinzer@ubuntu:android-10$ adb shell setprop persist.vendor.pure.name hinzer hinzer@ubuntu:android-10$ adb shell getprop persist.vendor.pure.name hinzer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
參考資料
Android系統開發入門-3.添加系統屬性
Android
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。