下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 Android 的属性系统 2021-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_p
3、roperty_xxx 函数获得共享内存中的属性。 libc 的源代码位于: device/system/bionic 。 属性效劳调用 libc 中的 _system_property_init 函数来初始化属性系统的共享内存。 当启动属性效劳时,将从以下 文件中加载默认属性: / p /system/p /system/p /data/p 属性将会以上述顺序加载。后加载的属性将覆盖原先的值。这些属性加载之后,最后加载的属性会被保持在 /data/property 中。 特别属性 如果属性名称以 “ ro. 开头
4、,那么这个属性被视为只读属性。一旦设置,属性值不能改变。 如果属性名称以 “ persist. 开头,当设置这个属性时,其值也将写入 /data/property 。 如果属性名称以 “ net. 开头,当设置这个属性时, “ net.change 属性将会自动设置,以参加到最后修改的属性名。 (这 是很巧妙的。 netresolve 模块的使用这个属性来追踪在 net.* 属性上的任何变化。) 属性 “ ctrl.start 和 “ ctrl.stop 是用来启动和停止效劳。每一项效劳必须在 /init.rc 中定义 .系统启动时,与 init 守护 进程将解析 init.rc 和启动属性效
5、劳。一旦收到设置 “ ctrl.start 属性的请求,属性效劳将使用该属性值作为效劳名找到 该效劳,启动该效劳。这项效劳的启动结果将会放入 “ init.svc.“ 属性中 。客户端应用程序可以轮询那个属性 值,以确定结果。 Android toolbox 程序 Android toolbox 程序提供了两个工具: setprop 和 getprop 获取和设置属性。其使用方法: getprop setprop Java 在 Java 应用程序可以使用 System.getProperty() 和 System.setProperty() 函数获取和设置属性。 Action 默认情况下,设置
6、属性只会使 init 守护程序写入共享内存,它不会执行任何脚本或二进制程序。但是,您可以将您的 想要的实现的操作与 init.rc 中某个属性的变化相关联 .例如,在默认的 init.rc 中有: # 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.
7、enable 为1 , init守护程序就知道需要采取行动:开启 adbd效劳。 1. android 现在好似只有/ p ,/system/p 两个文件,别的两个文件找不到 2. /data/property 下有 4 个 prop 文 件: persist.sys.timezone,persist.sys.language,persist.sys.country,persist.sys.localevar ,里面保存着属性名称 以persist.开头的属性值。 3. libcutils 的源码位于 下面,获取和设置属性的代码在 properties.
8、c 里面,读取属性通过读 共享内存得到,设置属性通过发送请求到 property_service 进行设置。 4. 相关的函数有 property_set , property_get , property_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;
9、 if(_syste m_property_area_ != (void*) &dummy_props) return 0; env = getenv(ANDROID_PROPERT Y_WORKSPACE); if (!env) return -1; fd = 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_FAIL ED) return -1; if(pa-magic
10、!= PROP_AREA_MAGIC) | (pa-version != PROP_AREA_VERSION ) munmap(pa, sz); return -1; _system_property_area_ = pa; return 0; 可以看至首先从环境变量里面获取 ANDROID_PROPERTY_WORKSPACE , ANDROID_PROPERTY_WORKSPACE 的 值为如下形式:ANDROID_PROPERTY_WORKSPACE=9,32768 。然后获取共享内存的文件句柄和长度, 最后对 共享内存进行检查并设置全局变量system_property_area_ 的
11、值,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 by the kernel. These are used in ActivityManagerService. setprop ro.FOREGROUND_APP_ADJ 0 setprop ro.VISIBLE
12、_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_ADJ 15 7.通过property_list 可以枚举所有的属性,下面是一段打印所有属性的代码。 view plaincopy to clipboardprint? #include #include void print_prop(const char* key,const
13、char* valu e,void* cookie) printf(key=%s,value=%sn,key,value); int main() property_list(pri nt_prop,NULL); Android.mk 文件: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= list_property.cpp LOCAL_SHARED_LIBRARIES := libcutils libutils LOCAL_MODULE:= list_prop include $(BUILD_EXECUT
14、ABLE) include $(call all-makefiles-under,$(LOCAL_PATH) 所有的属性如下:key=ro.build.date.utc,value=1242347389 key=ro.secure,value=0 key=ro.allow.mock.location,value=1 key=ro.debuggable,value=1 key=persist.service.adb.enable,value=1 key=ro.kernel.qemu,value=1 key=ro.kernel.console,value=ttyS0 key=ro.kernel.a
15、ndroid.checkjni,value=1 key=ro.kernel.android.qemud,value=ttyS1 key=ro.factorytest,value=0 key=ro.serialno,value= key=ro.bootmode,value=unknown key=ro.baseband,value=unknown key=ro.carrier,value=unknown key=ro.bootloader,value=unknown key=ro.hardware,value=goldfish key=ro.revision,value=0 key=ro.bui
16、ld.id,value=CUPCAKE key=ro.build.display.id,value=sdk-eng 1.5 CUPCAKE 148875 test-keys key=ro.build.version.incremental,value=148875 key=ro.build.version.sdk,value=3 key=ro.build.version.release,value=1.5 key=ro.build.date,value=Thu May 14 17:29:49 PDT 2021key=ro.build.type,value=eng key=ro.build.us
17、er,value=android-build key=ro.build.host,value=e-honda.mtv.corp.google key=ro.build.tags,value=test-keys key=duct.model,value=sdk key=duct.brand,value=generic key=,value=sdk key=duct.device,value=generic key=duct.board,value= key=duct.manufacturer,value=u
18、nknown key=duct.locale.language,value=en key=duct.locale.region,value=US key=ro.board.platform,value= key=duct,value=generic key=ro.build.description,value=sdk-eng 1.5 CUPCAKE 148875 test-keys key=ro.build.fingerprint,value=generic/sdk/generic/:1.5/CUPCAKE/148875:eng/test-key
19、s key=rild.libpath,value=/system/lib/libreference-ril.so key=rild.libargs,value=-d /dev/ttyS0 key=ro.config.notification_sound,value=F1_New_SMS.ogg key=xmpp.auto-presence,value=true key=ro.config.nocheckin,value=yes key=,value=Android key=net.change,value=net.gprs.local-ip key=persist.sys
20、.timezone,value=GMT key=persist.sys.language,value=en key=persist.sys.country,value=US key=persist.sys.localevar,value= key=ro.FOREGROUND_APP_ADJ,value=0 key=ro.VISIBLE_APP_ADJ,value=1 key=ro.SECONDARY_SERVER_ADJ,value=2 key=ro.HOME_APP_ADJ,value=4 key=ro.HIDDEN_APP_MIN_ADJ,value=7 key=ro.CONTENT_PR
21、OVIDER_ADJ,value=14 key=ro.EMPTY_APP_ADJ,value=15 key=ro.FOREGROUND_APP_MEM,value=1536 key=ro.VISIBLE_APP_MEM,value=2048 key=ro.SECONDARY_SERVER_MEM,value=4096 key=ro.HOME_APP_MEM,value=4096 key=ro.HIDDEN_APP_MEM,value=5120 key=ro.CONTENT_PROVIDER_MEM,value=5632 key=ro.EMPTY_APP_MEM,value=6144 key=n
22、et.tcp.buffersize.default,value=4096,87380,110208,4096,16384,110208 key=net.tcp.buffersize.wifi,value=4095,87380,110208,4096,16384,110208 key=net.tcp.buffersize.umts,value=4094,87380,110208,4096,16384,110208 key=net.tcp.buffersize.edge,value=4093,26280,35040,4096,16384,35040 key=net.tcp.buffersize.g
23、prs,value=4092,8760,11680,4096,8760,11680 key=init.svc.console,value=running key=init.svc.servicemanager,value=running key=init.svc.vold,value=running key=init.svc.debuggerd,value=running key=init.svc.ril-daemon,value=running key=init.svc.zygote,value=running key=init.svc.media,value=running key=init.svc.installd,value=running key=init.svc.flash_recovery,value=stopped key=init.svc.goldfish-setup,val
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工商合同规范管理科工作职责
- 杭州市事业单位聘用合同管理办法
- 《氩弧管管水平固定》课件
- 《母亲节促销方案》课件
- 2025年长春货运从业资格证考试题及答案大全
- 2025年哈尔滨货运从业资格考试题库答案大全
- 2025年和田货运上岗证考试题库答案
- 第25课《活板》知识点梳理及练习-2022-2023学年七年级语文下册古诗文专题期中期末复习(部编版)教师版
- 精密制造防火封堵
- 苏科版九年级物理上册一课一测-14.1电阻
- 小学侵害未成年人强制报告制度
- 2023年飞行员基础知识考试题库(500题版)
- 脊柱区1教学讲解课件
- 人工智能对中学教学的影响与应对策略
- 闭合导线自动计算表
- 分管学校安全、德育、后勤等业务副校长述职报告
- 笔试考试:HSK笔试(三级)真题模拟汇编(共603题)
- 全国城市一览表-excel
- 《WPS演示制作与设计》计算机应用基础高职专科一等奖(含课件制作试题及答案)
- 全国民用建筑工程技术措施暖通空调动力
- GB/T 6728-2017结构用冷弯空心型钢
评论
0/150
提交评论