2022年android系统 .pdf
《2022年android系统 .pdf》由会员分享,可在线阅读,更多相关《2022年android系统 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Android 的属性系统2011-04-10 17:42 每个属性都有一个名称和值,他们都是字符串格式。属性被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。每个进程可以get/set属性。在系统初始化时,Android将分配一个共享内存区来存储的属性。这些是由“init”守护进程完成的,其源代码位于:device/system/init。“init”守护进程将启动一个属性服务。属性服务在“init”守护进程中运行。每一个客户端想要设置属性时,必须连接属性服务,再向其发送信息。属性服务将会在共享内存区中修改和创建属性。任何客户端想获得属性信
2、息,可以从共享内存直接读取。这提高了读取性能。客户端应用程序可以调用libcutils中的 API 函数以 GET/SET 属性信息。libcutils的源代码位于:device/libs/cutils。API 函数是:int property_get(const char*key,char*value,const char*default_value);int property_set(const char*key,const char*value);而 libcutils又调用 libc 中的 _system_property_xxx 函数获得共享内存中的属性。libc 的源代码位于:de
3、vice/system/bionic。属性服务调用 libc 中的_system_property_init函数来初始化属性系统的共享内存。当启动属性服务时,将从以下文件中加载默认属性:/default.prop/system/build.prop/system/default.prop/data/local.prop 属性将会以上述顺序加载。后加载的属性将覆盖原先的值。这些属性加载之后,最后加载的属性会被保持在/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、应用程序可以轮询那个属性值,以确定结果。Android toolbox程序Android toolbox程序提供了两个工具:setprop和 getprop获取和设置属性。其使用方法:getprop setprop Java 在 Java 应用程序可以使用System.getProperty()和 System.setProperty()函数获取和设置属性。Action 默认情况下,设置属性只会使init 守护程序写入共享内存,它不会执行任何脚本或二进制程序。但是,您可以将您的想要的实现的操作与init.rc中某个属性的变化相关联.例如,在默认的 init.rc中有:名师资料总结-精品资料欢迎
6、下载-名师精心整理-第 1 页,共 8 页 -#adbd on at boot in emulator on property:ro.kernel.qemu=1 start adbd on property:persist.service.adb.enable=1 start adbd on property:persist.service.adb.enable=0 stop adbd 这样,如果你设置persist.service.adb.enable为 1,init 守护程序就知道需要采取行动:开启adbd 服务。1.android现在好像只有/default.prop,/system/b
7、uild.prop两个文件,别的两个文件找不到2./data/property下有 4 个 prop 文 件: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
8、_list。5.属性系统的初始化通过 _system_properties_init函数完成,_system_properties_init函数代码如下:view plaincopy to clipboardprint?int _system_properties_init(void)prop_area*pa;int s,fd;unsigned sz;char*env;if(_system_property_area_!=(void*)&dummy_props)return 0;env=getenv(ANDROID_PROPERTY_WORKSPACE);if(!env)return-1;fd
9、=atoi(env);env=strchr(env,);if(!env)return-1;sz=atoi(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;return 0;可以看到首先从环境变量里面获取ANDROID_PROPERTY_WORKSPACE,ANDROID_PROPE
10、RTY_WORKSPACE的 值为如下形式:ANDROID_PROPERTY_WORKSPACE=9,32768。然后获取共享内存的文件句柄和长度,最后对共享内存进行检查并设置全局变量 _system_property_area_的值,property_get就是从_system_property_area_里 面读取的属性值。环境变量的初始化在init.c 的 service_start函数里面。6./init.rc里面有设置属性的代码,例如:#Define the oom_adj values for the classes of processes that can be#killed
11、by the kernel.These are used in ActivityManagerService.名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 8 页 -setprop ro.FOREGROUND_APP_ADJ 0 setprop ro.VISIBLE_APP_ADJ 1 setprop ro.SECONDARY_SERVER_ADJ 2 setprop ro.HOME_APP_ADJ 4 setprop ro.HIDDEN_APP_MIN_ADJ 7 setprop ro.CONTENT_PROVIDER_ADJ 14 setprop ro.EMPTY_APP_
12、ADJ 15 7.通过 property_list可以枚举所有的属性,下面是一段打印所有属性的代码。view plaincopy to clipboardprint?#include#include void print_prop(const char*key,const char*value,void*cookie)printf(key=%s,value=%sn,key,value);int main()property_list(print_prop,NULL);Android.mk文件:LOCAL_PATH:=$(call my-dir)include$(CLEAR_VARS)LOCAL
13、_SRC_FILES:=list_property.cpp LOCAL_SHARED_LIBRARIES:=libcutils libutils LOCAL_MODULE:=list_prop include$(BUILD_EXECUTABLE)include$(call all-makefiles-under,$(LOCAL_PATH)所有的属性如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 8 页 -key=ro.secure,value=0 key=ro.allow.mock.location,value=1 key=ro.debuggable,value=1 key
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年android系统 2022 android 系统
限制150内