下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android 的属性系统2011-04-1017:42每个属性都有一个名称和值,他们都是字符串格式。属性被大量使用在 Android 系统中,用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。每个进程可以 get/set 属性。在系统初始化时,Android 将分配一个共享内存区来存储的属性。这些是由“init 守护进程完成的,其源代码位于:device/system/init。init 守护进程将启动一个属性服务。属性服务在“init 守护进程中运行。每一个客户端想要设置属性时,必须连接属性服务,再向其发送信息。属性服务将会在共享内存区中修改和创建属性。任何客户端想获得属
2、性信息,可以从共享内存直接读取。这提高了读取性能。客户端应用程序可以调用 libcutils 中的 API 函数以 GET/SET 属性信息。libcutils 的源代码位于:device/libs/cutils。API 函数是:intproperty_get(constchar*key,char*value,constchar*default_value);intproperty_set(constchar*key,constchar*value);而 libcutils 又调用 libc 中的_system_property_xxx 函数获得共享内存中的属性。libc 的源代码位于:dev
3、ice/system/bionic。属性服务调用 libc 中的system_property_init 函数来初始化属性系统的共享内存。当启动属性服务时,将从以下文件中加载默认属性:/p/system/p/system/p/data/p属性将会以上述顺序加载。后加载的属性将覆盖原先的值。这些属性加载之后,最后加载的属性会被保持在/data/property 中。特别属性如果属性名称以“ro.开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。如果属性名称以persist.开头,当设置这个属性时,其值也将写
4、入/data/property。如果属性名称以“net.开头,当设置这个属性时,net.change”属性将会自动设置,以加入到最后修改的属性名。(这是很巧妙的。netresolve 模块的使用这个属性来追踪在 net.*属性上的任何变化。)属性ctrl.start 和ctrl.stop 是用来启动和停止服务。每一项服务必须在/init.rc 中定义.系统启动时,与 init 守护进程将解析 init.rc 和启动属性服务。一旦收到设置“ctrl.start 属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。这项服务的启动结果将会放入“init.svc.嘱性中。客户端应用程序
5、可以轮询那个属性值,以确定结果。Androidtoolbox 程序Androidtoolbox 程序提供了两个工具:setprop 和 getprop 获取和设置属性。其使用方法:getpropsetpropJava在 Java 应用程序可以使用 System.getProperty()和 System.setProperty()函数获取和设置属性。Action默认情况下,设置属性只会使init守护程序写入共享内存,它不会执行任何脚本或二进制程序。但是,您可以将您的想要的实现的操作与 init.rc 中某个属性的变化相关联.例如,在默认的 init.rc 中有:#adbdonatbootine
6、mulatoronproperty:ro.kernel.qemu=1startadbdonproperty:persist.service.adb.enable=1startadbdonproperty:persist.service.adb.enable=0stopadbd这样,如果你设置 persist.service.adb.enable 为 1,init守护程序就知道需要采取行动:开启 adbd 服务。1. android 现在好像只有/p,/system/p 两个文件,别的两个文件找不到2. /data/property 下有 4 个 prop
7、 文件:persist.sys.timezone,persist.sys.language,persist.sys.country,persist.sys.localevar,里面保存着属性名称以persist.开头的属性值。3. libcutils 的源码位于下面,获取和设置属性的代码在 properties.c 里面,读取属性通过读共享内存得到,设置属性通过发送请求到 property_service 进行设置。4. 相关的函数有 property_set,property_get,property_list。5. 属性系统的初始化通过system_properties_init 函数完成
8、,system_properties_init 函数代码如下:viewplaincopytoclipboardprint?int_system_properties_init(void)prop_area*pa;ints,fd;unsignedsz;char*env;if(_system_property_area_!=(void*)&dummy_props)return0;env=getenv(ANDROID_PROPERTY_WORKSPACE);if(!env)return-1;fd=atoi(env);env=strchr(env,);if(!env)return-1;sz=a
9、toi(env+1);pa=mmap(0,sz,PROT_READ,MAP_SHARED,fd,0);if(pa=MAP_FAILED)return-1;if(pa-magic!=PROP_AREA_MAGIC)|(pa-version!=PROP_AREA_VERSION)munmap(pa,sz);return-1;_system_property_area_=pa;return0;可以看至首先从环境变量里面获取 ANDROID_PROPERTY_WORKSPACE,ANDROID_PROPERTY_WORKSPACE 的值为如下形式:ANDROID_PROPERTY_WORKSPACE=
10、9,32768。然后获取共享内存的文件句柄和长度,最后对共享内存进行检查并设置全局变量system_property_area_的值,property_get 就是从_system_property_area_里面读取的属性值。环境变量的初始化在 init.c 的 service_start 函数里面。6. /init.rc 里面有设置属性的代码,例如:#Definetheoom_adjvaluesfortheclassesofprocessesthatcanbe#killedbythekernel.TheseareusedinActivityManagerService.setpropro.
11、FOREGROUND_APP_ADJ0setpropro.VISIBLE_APP_ADJ1setpropro.SECONDARY_SERVER_ADJ2setpropro.HOME_APP_ADJ4setpropro.HIDDEN_APP_MIN_ADJ7setpropro.CONTENT_PROVIDER_ADJ14setpropro.EMPTY_APP_ADJ157.通过 property_list 可以枚举所有的属性,下面是一段打印所有属性的代码。viewplaincopytoclipboardprint?#include#includevoidprint_prop(constchar*
12、key,constchar*value,void*cookie)printf(key=%s,value=%sn”,key,value);intmain()property_list(print_prop,NULL);Android.mk 文件:LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_SRC_FILES:=list_property.cppLOCAL_SHARED_LIBRARIES:=libcutilslibutilsLOCAL_MODULE:=list_propinclude$(BUILD_EXECUTABLE)include$(
13、callall-makefiles-under,$(LOCAL_PATH)所有的属性如下:key=ro.secure,value=0key=ro.allow.mock.location,value=1key=ro.debuggable,value=1key=persist.service.adb.enable,value=1key=ro.kernel.qemu,value=1key=ro.kernel.console,value=ttyS0key=ro.kernel.android.checkjni,value=1key=ro.kernel.android.qemud,value=ttyS1k
14、ey=ro.factorytest,value=0key=ro.serialno,value=key=ro.bootmode,value=unknownkey=ro.baseband,value=unknownkey=ro.carrier,value=unknownkey=ro.bootloader,value=unknownkey=ro.hardware,value=goldfishkey=ro.revision,value=0key=ro.build.id,value=CUPCAKEkey=ro.build.display.id,value=sdk-eng1.5CUPCAKE148875t
15、est-keyskey=ro.build.version.incremental,value=148875key=ro.build.version.sdk,value=3key=ro.build.version.release,value=1.5key=ro.build.date,value=ThuMay1417:29:49PDT2009key=ro.build.type,value=engkey=ro.build.user,value=android-buildkey=ro.build.host,value=e-key=ro.build.tags,value=test-keyskey=ro.
16、product.model,value=sdkkey=duct.brand,value=generickey=,value=sdkkey=duct.device,value=generickey=duct.board,value=key=duct.manufacturer,value=unknownkey=duct.locale.language,value=enkey=duct.locale.region,value=USkey=ro.board.platform,value=key=ro.
17、duct,value=generickey=ro.build.description,value=sdk-eng1.5CUPCAKE148875test-keyskey=ro.build.fingerprint,value=generic/sdk/generic/:1.5/CUPCAKE/148875:eng/test-keyskey=rild.libpath,value=/system/lib/libreference-ril.sokey=rild.libargs,value=-d/dev/ttyS0key=ro.config.notification_sound,valu
18、e=F1_New_SMS.oggkey=xmpp.auto-presence,value=truekey=ro.config.nocheckin,value=yeskey=,value=Androidkey=net.change,value=net.gprs.local-ipkey=persist.sys.timezone,value=GMTkey=persist.sys.language,value=enkey=persist.sys.country,value=USkey=persist.sys.localevar,value=key=ro.FOREGROUND_AP
19、P_ADJ,value=0key=ro.VISIBLE_APP_ADJ,value=1key=ro.SECONDARY_SERVER_ADJ,value=2key=ro.HOME_APP_ADJ,value=4key=ro.HIDDEN_APP_MIN_ADJ,value=7key=ro.CONTENT_PROVIDER_ADJ,value=14key=ro.EMPTY_APP_ADJ,value=15key=ro.FOREGROUND_APP_MEM,value=1536key=ro.VISIBLE_APP_MEM,value=2048key=ro.SECONDARY_SERVER_MEM,
20、value=4096key=ro.HOME_APP_MEM,value=4096key=ro.HIDDEN_APP_MEM,value=5120key=ro.CONTENT_PROVIDER_MEM,value=5632key=ro.EMPTY_APP_MEM,value=6144key=net.tcp.buffersize.default,value=4096,87380,110208,4096,16384,110208key=net.tcp.buffersize.wifi,value=4095,87380,110208,4096,16384,110208key=net.tcp.buffer
21、size.umts,value=4094,87380,110208,4096,16384,110208key=net.tcp.buffersize.edge,value=4093,26280,35040,4096,16384,35040key=net.tcp.buffersize.gprs,value=4092,8760,11680,4096,8760,11680key=init.svc.console,value=runningkey=init.svc.servicemanager,value=runningkey=init.svc.vold,value=runningkey=init.svc.debuggerd,value=runningkey=init.svc.ril-daemon,value=runningkey=init.svc.zygote,value=runningkey=init.svc.media,value=runningkey=init.svc.installd,value=runningkey=init.svc.flash_recovery,value=stoppedkey=init.svc.goldfish-setup,value=stoppedkey=in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025简易短期劳动合同协议书
- 企业资源整合规划模板资源共享版
- 小鸟归巢的故事童话作文15篇
- 企业沟通协作平台构建方案
- 社区公益参与和服务保障承诺书5篇范文
- 财务审计与控制管理模板
- 企业数据分析标准工具多场景适用版
- 镀金着色金属画行业深度研究报告
- 与自然和谐相处的启示话题作文(7篇)
- 2025绿化用品采购合同书样本
- 中央厨房库存管理制度
- 垃圾房清洁管理制度
- 民办学校退费管理制度
- 2025至2030年中国水晶泥行业市场专项调研及竞争战略分析报告
- 肾移植手术的麻醉管理
- 成人床旁心电监护护理规程
- 液冷系统能效优化-洞察及研究
- 2025江苏扬州大数据集团子公司管理人员招聘1人笔试备考题库及答案详解参考
- 2025至2030中国公路货运行业发展趋势分析与未来投资战略咨询研究报告
- 中职艺术理论考试题库及答案
- 医用化学(第三版)课件 -第20章 脂类化合物
评论
0/150
提交评论