android 的系统属性systemproperties分析bobs blo.docx
- 文档编号:516354
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:7
- 大小:17.65KB
android 的系统属性systemproperties分析bobs blo.docx
《android 的系统属性systemproperties分析bobs blo.docx》由会员分享,可在线阅读,更多相关《android 的系统属性systemproperties分析bobs blo.docx(7页珍藏版)》请在冰点文库上搜索。
android的系统属性systemproperties分析bobsblo
android的系统属性(systemproperties)分析bobsblo...
Android的系统属性(SystemProperties)分析
bybob,2,184views以下分析以android4.03为基础
前言
Android的系统属性相当于windows的注册表,由key和value组成,且都是核心系统的一个基本机制。
相对于windows的注册表,Android的系统属性要简单一些,它没有windows注册表的树状结构,而只是一个列表,也就是说没有父子关系。
value有string,int,long,boolean,但是设置只能通过字符串方式。
Android的系统属性包括两部分:
文件保存的持久属性和每次开机导入的cache属性。
前者主要保存在下面几个文件中(目录下):
/default.prop
/system/build.prop
/system/default.prop
/data/local.prop
/data/property目录下的所有presist属性(以presist.开头)
后者则通过API方式使用。
一、接口
1.JAVA层接口:
包名:
android.os
类名:
SystemProperties,为隐藏类
接口:
publicstaticStringget(Stringkey,Stringdef)
publicstaticintgetInt(Stringkey,intdef)
publicstaticlonggetLong(Stringkey,longdef)
publicstaticbooleangetBoolean(Stringkey,booleandef)
publicstaticvoidset(Stringkey,Stringval)
其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.本地接口
接口:
intproperty_get(constchar*key,char*value,constchar*default_value)
/*property_set:
returns0onsuccess,<0onfailure
*/
intproperty_set(constchar*key,constchar*value)
intproperty_list(void(*propfn)(constchar*key,constchar*value,void*cookie),void*cookie)
文件:
system/core/include/cutils/properties.h
system/core/libcutils/properties.c
4.底层bionic内部接口
除非想修改系统属性机制,可以分析一下
int__system_property_get(constchar*name,char*value);
int__system_property_set(constchar*key,constchar*value);
constprop_info*__system_property_find(constchar*name);
int__system_property_read(constprop_info*pi,char*name,char*value);
constprop_info*__system_property_find_nth(unsignedn);
文件:
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我们可以设置属性,监听属性变化
setpropkeyvalue
onproperty:
key=value
do_your_work
实现:
property的处理在init进程中,相关文件
system/core/init/property_service.c
system/core/init/property_service.h
入口函数start_property_service及property_init、load_persist_props
1.通讯机制:
property_set有两套实现,一套接口3:
本地接口的实现,会调用接口4:
中的__system_property_set,__system_property_set通过本地SOCKET:
“/dev/socket/property_service”与init进程中properties服务通讯。
在init进程的system/core/init/property_service.c(h)代码中有另一套property_set实现,仅用于init进程。
2.安全实现:
设置key的value时,需要作鉴权,根据设置程序所在进程的fd获知uid值,比如systemserver进程可以设置net打头的key,不可以设置gsm打头的key,相关的定义如下:
权限定义system/core/include/private/android_filesystem_config.h
#defineAID_ROOT0/*traditionalunixrootuser*/
#defineAID_SYSTEM1000/*systemserver*/
#defineAID_RADIO1001/*telephonysubsystem,RIL*/
#defineAID_DHCP1014/*dhcpclient*/
#defineAID_SHELL2000/*adbanddebugshelluser*/
#defineAID_CACHE2001/*cacheaccess*/
#defineAID_APP10000/*firstappuser*/
属性权限表在system/core/init/property_service.c定义,采用白名单方式
struct{
constchar*prefix;
unsignedintuid;
unsignedintgid;
}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函数来检查权限
下面是服务控制权限
struct{
constchar*service;
unsignedintuid;
unsignedintgid;
}control_perms[]={
{"dumpstate",AID_SHELL,AID_LOG},
{"ril-daemon",AID_RADIO,AID_RADIO},
{NULL,0,0}
};
通过check_control_perms函数来检查权限
3.监听变化
在修改属性的时候,会通过函数property_changed通知init触发init.rc中的trigger。
4.属性特殊处理:
1.ctl.开头的属性是控制属性,用于控制系统的本地服务
ctl.start
ctl.stop
ctl.restart
使用语法
ctl.xxxservicename[:
args]
2.ro.开头的属性不能被修改;
3.net.开始的属性(除net.change外)设置,将引发net.change=key的属性设置,被bionic/libc/netbsd/resolv/res_state.c中的代码处理(通过__system_property_find函数);
4.persist.开始的属性,如果在init.rc和代码中设置,将会被写到/data/property目录下;
relatedpostAndroid调试技术使用GDB单步调试Android本地代码android4.0联系人分析—查找匹配AndroidAudio分析android2.3应用管理机制分析relatedpost
androidservices一、简介service是android应用4种组件之一,是没有界面的在后台运行的服务。
service有两种形式1.启动的(Started)通过应用组件的接口startService()启动,服务启动后独立运行。
2.绑定的(Bound)通过应用组件的接口bindService()启动,提供CS方式的进程间通讯,在所有绑定的组件解除绑定后,服务退出。
这两种形式可以单独也可以同时存在于一个service上。
...
Android调试技术一、JAVA层单步调试参见“用eclipse单步调试Laucher”参见“用eclipse编译调试adnroid的Browser”二、Native层单步调试参见“使用GDB单步调试Android本地代码”三、JAVA层堆栈打印1.在指定的函数内打印相关java调用Log.d(TAG,Log.getStackTraceString(new...
android2.3应用管理机制分析分析目的为了分析内存不足时,android如何选择需要被杀死的应用的机制。
改进以达到避免重要应用不被杀死。
一、架构二、ActivityManagerService中应用等级Android应用优先级及内存限制ProcssPriorityNameActivityManagerService...
android2.3启动分析—init进程前言Androidinit进程作为android系统的第一个进程,有设置环境、启动各种android本地服务(不同于androidservice)、android精子进程,监测android本地服务状态,设备状态,系统属性设置改变事件,击键事件及Log等功能。
Android修改了linuxinit的配置机制,添加了android本地服务管理功能。
android本地服务管理包括服务依赖、重启等机制。
一、Init启动顺序分析1.init首先分析从kernel传入的参数,可能有以下的参数qemu...
Androidmirror制作及相关使用1.mirror的制作#su-git#curlhttp:
//android.git.kernel.org/repo>~/bin/repo#chmoda+x...
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android 的系统属性systemproperties分析 bobs blo 系统 属性 systemproperties 分析
![提示](https://static.bingdoc.com/images/bang_tan.gif)