02 Android系統之添加系統屬性

      網友投稿 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

      02 Android系統之添加系統屬性

      16

      17

      18

      19

      20

      21

      22

      23

      24

      參考資料

      Android系統開發入門-3.添加系統屬性

      Android

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:充值稻殼會員/超級會員后下載模板為什么還需要另外購買(稻殼不是會員能下載模板嗎)
      下一篇:文檔中的結尾處按空格不能自動換行(怎么把文檔中空格消除還自動換行)
      相關文章
      久久国产亚洲精品无码| 久久水蜜桃亚洲av无码精品麻豆| 亚洲国产精品张柏芝在线观看| 亚洲国产成人私人影院| 亚洲Av无码专区国产乱码DVD| 综合亚洲伊人午夜网 | 亚洲电影唐人社一区二区| 亚洲视频在线播放| 亚洲人成电影福利在线播放| 亚洲av综合av一区| 亚洲欧洲免费视频| 亚洲欧洲视频在线观看| 激情亚洲一区国产精品| 亚洲一区二区三区高清不卡| 亚洲国产视频久久| 亚洲精品国产suv一区88| 亚洲va中文字幕| 国产成人 亚洲欧洲| 亚洲国产人成精品| 精品国产亚洲男女在线线电影| 久久久久亚洲AV成人网人人软件| 亚洲午夜久久久久久噜噜噜| 国产亚洲成av人片在线观看| 亚洲国产国产综合一区首页| 亚洲视频在线不卡| 亚洲av无码片区一区二区三区| 精品国产日韩久久亚洲| 亚洲AV噜噜一区二区三区| 亚洲av片一区二区三区| 亚洲性久久久影院| 亚洲国产精品无码AAA片| 亚洲国产综合专区电影在线| 亚洲成人福利在线观看| 亚洲天堂2017无码中文| 亚洲av永久无码一区二区三区| 亚洲成av人片天堂网老年人 | 亚洲精品福利在线观看| 亚洲AV无码久久久久网站蜜桃| 亚洲熟妇无码AV不卡在线播放| 亚洲成在人线aⅴ免费毛片| 亚洲国产人成中文幕一级二级|