久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android 的系統(tǒng)屬性(SystemProperties)分析 | Bob's Blo...

 arm_embed 2012-11-14

以下分析以android 4.03為基礎

前言

Android的系統(tǒng)屬性相當于windows的注冊表,,由key和value組成,,且都是核心系統(tǒng)的一個基本機制,。相對于windows的注冊表,Android的系統(tǒng)屬性要簡單一些,,它沒有windows注冊表的樹狀結構,,而只是一個列表,也就是說沒有父子關系,。value有string,,int,long,,boolean,,但是設置只能通過字符串方式。

Android 的系統(tǒng)屬性包括兩部分:文件保存的持久屬性和每次開機導入的cache屬性,。前者主要保存在下面幾個文件中(目錄下):

  • /default.prop
  • /system/build.prop
  • /system/default.prop
  • /data/local.prop
  • /data/property目錄下的所有presist屬性(以presist.開頭)

后者則通過API方式使用,。

一、接口

1. JAVA層接口:

包名:android.os

類名:SystemProperties,,為隱藏類

接口

  • public static String get(String key, String def)
  • public static int getInt(String key, int def)
  • public static long getLong(String key, long def)
  • public static boolean getBoolean(String key, boolean def)
  • public static void set(String key, String val) 

其key長度不能超過31字,,val不超過91字
文件:

  • frameworks/base/core/java/android/os/SystemProperties.java

2.JNI接口

在android_os_SystemProperties.cpp定義,在frameworks/base/core/jni/AndroidRuntime.cpp中注冊JNI

3.本地接口

接口:

  • int property_get(const char *key, char *value, const char *default_value)
  • /* property_set: returns 0 on success, < 0 on failure
    */
    int property_set(const char *key, const char *value)
  • int property_list(void (*propfn)(const char *key, const char *value, void *cookie), void *cookie)
文件:
  • system/core/include/cutils/properties.h
  • system/core/libcutils/properties.c

4. 底層bionic內(nèi)部接口

除非想修改系統(tǒng)屬性機制,,可以分析一下

  • int __system_property_get(const char *name, char *value);
  • int __system_property_set(const char *key, const char *value);
  • const prop_info *__system_property_find(const char *name);
  • int __system_property_read(const prop_info *pi, char *name, char *value);
  • const prop_info *__system_property_find_nth(unsigned n);

文件:

  • bionic/libc/include/sys/system_properties.h
  • bionic/libc/include/sys/_system_properties.h
  • bionic/libc/bionic/system_properties.c

5. init.rc接口

原始rc文件有

  • system/core/rootdir/init.rc
  • device/vendor/platformname/init.devicename.rc

編譯后在跑到out/target/product/platformname/root/下

做成image后在out/target/product/platformname/ramdisk.img,,有可能由于平臺不一樣,文件名不一樣

設備運行后就是在根目錄下的一些init*.rc文件

在init.rc我們可以設置屬性,,監(jiān)聽屬性變化

setprop key value
on property:key=value
   do_your_work

實現(xiàn):

property的處理在init進程中,,相關文件

  • system/core/init/property_service.c
  • system/core/init/property_service.h

入口函數(shù)start_property_service及property_init、load_persist_props

1. 通訊機制:

property_set有兩套實現(xiàn),,一套接口3:本地接口的實現(xiàn),會調用接口4:中的 __system_property_set,,__system_property_set通過本地SOCKET: “/dev/socket/property_service” 與init進程中properties服務通訊。

在init進程的system/core/init/property_service.c(h)代碼中有另一套property_set實現(xiàn),,僅用于init進程,。

2. 安全實現(xiàn):

設置key的value時,需要作鑒權,,根據(jù)設置程序所在進程的fd獲知uid值,,比如system server進程可以設置net打頭的key,不可以設置gsm打頭的key,,相關的定義如下:

權限定義system/core/include/private/android_filesystem_config.h

#define AID_ROOT             0  /* traditional unix root user */
#define AID_SYSTEM        1000  /* system server */
#define AID_RADIO         1001  /* telephony subsystem, RIL */
#define AID_DHCP          1014  /* dhcp client */
#define AID_SHELL         2000  /* adb and debug shell user */
#define AID_CACHE         2001  /* cache access */
#define AID_APP          10000 /* first app user */

屬性權限表在system/core/init/property_service.c定義,,采用白名單方式

struct {
    const char *prefix;
    unsigned int uid;
    unsigned int gid;
} property_perms[] = {
    { "net.rmnet0.",      AID_RADIO,    0 },
    { "net.gprs.",        AID_RADIO,    0 },
    { "net.ppp",          AID_RADIO,    0 },
    { "net.qmi",          AID_RADIO,    0 },
    { "net.lte",          AID_RADIO,    0 },
    { "net.cdma",         AID_RADIO,    0 },
    { "ril.",             AID_RADIO,    0 },
    { "gsm.",             AID_RADIO,    0 },
    { "persist.radio",    AID_RADIO,    0 },
    { "net.dns",          AID_RADIO,    0 },
    { "sys.usb.config",   AID_RADIO,    0 },
    { "net.",             AID_SYSTEM,   0 },
    { "dev.",             AID_SYSTEM,   0 },
    { "runtime.",         AID_SYSTEM,   0 },
    { "hw.",              AID_SYSTEM,   0 },
    { "sys.",             AID_SYSTEM,   0 },
    { "service.",         AID_SYSTEM,   0 },
    { "wlan.",            AID_SYSTEM,   0 },
    { "dhcp.",            AID_SYSTEM,   0 },
    { "dhcp.",            AID_DHCP,     0 },
    { "debug.",           AID_SHELL,    0 },
    { "log.",             AID_SHELL,    0 },
    { "service.adb.root", AID_SHELL,    0 },
    { "service.adb.tcp.port", AID_SHELL,    0 },
    { "persist.sys.",     AID_SYSTEM,   0 },
    { "persist.service.", AID_SYSTEM,   0 },
    { "persist.security.", AID_SYSTEM,   0 },
    { NULL, 0, 0 }
};

通過check_perms函數(shù)來檢查權限

下面是服務控制權限

struct {
    const char *service;
    unsigned int uid;
    unsigned int gid;
} control_perms[] = {
    { "dumpstate",AID_SHELL, AID_LOG },
    { "ril-daemon",AID_RADIO, AID_RADIO },
     {NULL, 0, 0 }
};

通過check_control_perms函數(shù)來檢查權限

3. 監(jiān)聽變化

在修改屬性的時候,會通過函數(shù)property_changed通知init觸發(fā)init.rc中的trigger,。

4. 屬性特殊處理:

1. ctl.開頭的屬性是控制屬性,,用于控制系統(tǒng)的本地服務

  • ctl.start
  • ctl.stop
  • ctl.restart

使用語法

ctl.xxx   servicename[:args]
2. ro.開頭的屬性不能被修改;
3. net.開始的屬性(除net.change外)設置,,將引發(fā)net.change=key的屬性設置,,被bionic/libc/netbsd/resolv/res_state.c中的代碼處理(通過__system_property_find函數(shù));
4. persist.開始的屬性,,如果在init.rc和代碼中設置,,將會被寫到/data/property目錄下;

related post


related post

  • android services 一,、簡介 service是android應用4種組件之一,,是沒有界面的在后臺運行的服務。 service有兩種形式 1. 啟動的(Started) 通過應用組件的接口startService()啟動,服務啟動后獨立運行,。 2. 綁定的(Bound) 通過應用組件的接口bindService()啟動,,提供CS方式的進程間通訊,在所有綁定的組件解除綁定后,,服務退出,。 這兩種形式可以單獨也可以同時存在于一個service上。...
  • Android 調試技術 一,、JAVA層單步調試 參見“用eclipse單步調試Laucher” 參見“用eclipse編譯調試adnroid的Browser” 二,、Native層單步調試 參見“使用GDB 單步調試Android本地代碼” 三、JAVA層堆棧打印 1. 在指定的函數(shù)內(nèi)打印相關java調用 Log.d(TAG,Log.getStackTraceString(new...
  • android 2.3 應用管理機制分析 分析目的 為了分析內(nèi)存不足時,,android如何選擇需要被殺死的應用的機制,。改進以達到避免重要應用不被殺死。 一,、架構   二,、ActivityManagerService中應用等級 Android應用優(yōu)先級及內(nèi)存限制 Procss Priority Name ActivityManagerService...
  • android 2.3啟動分析—init進程 前言 Android init進程作為android系統(tǒng)的第一個進程,有設置環(huán)境,、啟動各種android本地服務(不同于android service),、android精子進程,監(jiān)測android本地服務狀態(tài),,設備狀態(tài),,系統(tǒng)屬性設置改變事件,擊鍵事件及Log等功能,。 Android修改了linux init的配置機制,,添加了android本地服務管理功能。android本地服務管理包括服務依賴,、重啟等機制,。 一、Init啟動順序分析 1. init首先分析從kernel傳入的參數(shù),,可能有以下的參數(shù) qemu...
  • Android mirror制作及相關使用 1. mirror的制作 #su - git #curl http://android.git./repo >~/bin/repo #chmod a+x...

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多