Android属性系统简介【转】( 二 )


int property_get(const char *key, char *value, const char *default_value);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/init. c= > main( ) 进程将调用= > property_init= > init_property_areavoid property_init( void ) {//ashmem_area - android shared memory area是android共享内容存的一种方式//打开ashmem设备,申请一段size大小的kernel空间内存,不去释放,以便供所有用户空间进程共享.//内核驱动位于linux/mm/ashmem.c文件[luther.gliethttp].init_property_area( ) ; //#define PROP_PATH_RAMDISK_DEFAULT "/default.prop"//从ramdisk中读取default.prop文件,将文件中的所有java环境中使用到的propt释放到//这个共享内存中.load_properties_from_file( PROP_PATH_RAMDISK_DEFAULT) ;}
后面将调用.c,启动最原始的 .
然后通过. c,的init函数完成内核的初始化工作 。
5.2、属性的访问
如果在C/C++层次,则可以使用的下列函数来访问 。
int property_get(const char *key, char *value, const char *default_value);int property_set(const char *key, const char *value);int property_list(void(*propfn)(const char * key, const char * value, void * cookie), void * cookie);
如果在Java层次,则可以使用./.该方法(set/get)实际将调用.java进行访问,而.java通过jni调用进行访问 。
5.3、

Android属性系统简介【转】

文章插图
默认是可以存储247笔.但因为我司有大量的数据被写入到这个 中,导致容易出现mmap到 中的缓存溢出 。一方面需要确认数据是否确实有必要写入 ,另外一方面,可以扩大缓存的区间 。
缓存区间可以分成两大部分(byte), Info Area , Array Area. Info Area又分成和NameArea.
8*4
EveryName* 4
Every Value row and the maxis 127
因为,给出固定的最大笔数N.缓存定义上要求
#define PA_COUNT_MAXN#define PA_INFO_START((8+PA_COUNT_MAX) * 4) 最好保证这个值为32的整数倍#define PA_SZE(PA_INFO_START + (128 * PA_COUNT_MAX))
5.4、控制属性
在 中提供两个特殊的key, ctl.start和ctl.stop来启动和关闭服务 。
其API描述是:
SystemProperties.set(“ctl.start”,serviceName);SystemProperties.set(“ctl.stop”,serviceName);
注意的是,这个可在init.rc中查询
5.5、Init属性
Init属性是 中的一种特殊的属性,由init.c定义,init会监控定义在init.rc中的服务,并定义init.svc.xxxx的 .
具体实现,可参考init.c中的函数 。
我们除了直接ps来查看这些进程信息外,还可以直接通过查看 来确认这些服务的状态,如
[init.svc.bootlogoupdater]: [stopped][init.svc.pvrsrvinit]: [stopped][init.svc.servicemanager]: [running][init.svc.vold]: [running][init.svc.netd]: [running][init.svc.netdiag]: [running][init.svc.hald]: [running][init.svc.debuggerd]: [running][init.svc.zygote]: [running][init.svc.drmserver]: [running][init.svc.media]: [running][init.svc.dbus]: [running][init.svc.installd]: [running][init.svc.keystore]: [running][init.svc.console]: [running][init.svc.adbd]: [running][init.svc.ril-daemon]: [running]
5.6、属性安全性
作为一个共享的缓存系统,并非任何AP都可以随意去修改其中的属性,针对这些属性,如果进行更改时,会有UID上的约束 。
/* White list of permissions for setting property services. */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 },{ "sys.powerctl",AID_SHELL,0 },{ "service.",AID_SYSTEM,0 },{ "wlan.",AID_SYSTEM,0 },{ "gps.",AID_GPS,0 },{ "bluetooth.",AID_BLUETOOTH,0 },{ "dhcp.",AID_SYSTEM,0 },{ "dhcp.",AID_DHCP,0 },{ "debug.",AID_SYSTEM,0 },{ "debug.",AID_SHELL,0 },{ "log.",AID_SHELL,0 },{ "service.adb.root", AID_SHELL,0 },{ "service.adb.tcp.port", AID_SHELL,0 },{ "persist.logd.size",AID_SYSTEM,0 },{ "persist.sys.",AID_SYSTEM,0 },{ "persist.service.", AID_SYSTEM,0 },{ "persist.security.", AID_SYSTEM,0 },{ "persist.gps.",AID_GPS,0 },{ "persist.service.bdroid.", AID_BLUETOOTH,0 },{ "selinux.", AID_SYSTEM,0 },{ "wc_transport.",AID_BLUETOOTH,AID_SYSTEM },{ "build.fingerprint", AID_SYSTEM,0 },{ "partition.", AID_SYSTEM,0},#ifdef DOLBY_UDC{ "dolby.audio",AID_MEDIA,0 },#endif // DOLBY_UDC#ifdef DOLBY_DAP// used for setting Dolby specific properties{ "dolby.", AID_SYSTEM,0 },#endif // DOLBY_DAP{ "sys.audio.init",AID_MEDIA,0 },{ NULL, 0, 0 }};