Android的属性系统(转)

转载 2011年01月25日 09:50:00

网上有一篇文章介绍了Android的属性系统(http://blog.csdn.net/tekkamanitachi/archive/2009/06/18/4280982.aspx ),我现在对其进行补充:

1. android现在好像只有/ default.prop,/system/build.prop两个文件,别的两个文件找不到

2. /data/property下有4个prop文 件:persist.sys.timezone,persist.sys.language,persist.sys.country,persist.sys.localevar, 里面保存着属性名称以“persist.”开头的属性值。

3. libcutils的源码位于system/core/libcutils/下面,获取和设置属性的代码在properties.c里面,读取属性通过读共享内存得到,设置属性通过发送请求到property_service进行设置。

4. 相关的函数有property_set,property_get,property_list。

5. 属性系统的初始化通过__system_properties_init函数完成,__system_properties_init函数代码如下:

  1. int  __system_properties_init( void )  
  2. {  
  3. prop_area *pa;  
  4. int  s, fd;  
  5. unsigned sz;  
  6. char  *env;  
  7. if (__system_property_area__ != (( void *) &dummy_props)) {  
  8. return  0;  
  9. }  
  10. env = getenv("ANDROID_PROPERTY_WORKSPACE" );  
  11. if  (!env) {  
  12. return  -1;  
  13. }  
  14. fd = atoi(env);  
  15. env = strchr(env, ',' );  
  16. if  (!env) {  
  17. return  -1;  
  18. }  
  19. sz = atoi(env + 1);  
  20. pa = mmap(0, sz, PROT_READ, MAP_SHARED, fd, 0);  
  21. if (pa == MAP_FAILED) {  
  22. return  -1;  
  23. }  
  24. if ((pa->magic != PROP_AREA_MAGIC) || (pa->version != PROP_AREA_VERSION)) {  
  25. munmap(pa, sz);  
  26. return  -1;  
  27. }  
  28. __system_property_area__ = pa;  
  29. return  0;  
  30. }  
 

可以看到首先从环境变量里面获取ANDROID_PROPERTY_WORKSPACE,ANDROID_PROPERTY_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 by the kernel. These are used in ActivityManagerService.

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_ADJ 15

7. 通过property_list可以枚举所有的属性,下面是一段打印所有属性的代码。

  1. #include <cutils/properties.h>   
  2. #include <stdio.h>   
  3. void  print_prop( const   char * key, const   char * value, void * cookie)  
  4. {  
  5.     printf("key=%s,value=%s/n" ,key,value);  
  6. }  
  7.   
  8. int  main()  
  9. {  
  10.     property_list(print_prop,NULL);  
  11. }  
 

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_EXECUTABLE)

include $(call all-makefiles-under,$(LOCAL_PATH))

所有的属性如下:

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.android.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.build.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 2009

key=ro.build.date.utc,value=1242347389

key=ro.build.type,value=eng

key=ro.build.user,value=android-build

key=ro.build.host,value=e-honda.mtv.corp.google.com

key=ro.build.tags,value=test-keys

key=ro.product.model,value=sdk

key=ro.product.brand,value=generic

key=ro.product.name,value=sdk

key=ro.product.device,value=generic

key=ro.product.board,value=

key=ro.product.manufacturer,value=unknown

key=ro.product.locale.language,value=en

key=ro.product.locale.region,value=US

key=ro.board.platform,value=

key=ro.build.product,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-keys

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=net.bt.name,value=Android

key=net.change,value=net.gprs.local-ip

key=dalvik.vm.stack-trace-file,value=/data/anr/traces.txt

key=persist.sys.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_PROVIDER_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=net.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.gprs,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,value=stopped

key=init.svc.qemud,value=stopped

key=init.svc.goldfish-logcat,value=stopped

key=ARGH,value=ARGH

key=net.eth0.dns1,value=10.0.2.3

key=net.gprs.local-ip,value=10.0.2.15

key=ro.radio.use-ppp,value=no

key=status.battery.state,value=Slow

key=status.battery.level,value=5

key=status.battery.level_raw,value=50

key=status.battery.level_scale,value=9

key=ro.setupwizard.mode,value=EMULATOR

key=ro.com.google.locationfeatures,value=1

key=init.svc.adbd,value=running

key=ro.qemu.init.completed,value=1

key=hw.keyboards.65536.devname,value=qwerty2

key=sys.settings_secure_version,value=2

key=dev.bootcomplete,value=1

key=sys.settings_system_version,value=6

key=gsm.sim.operator.numeric,value=

key=gsm.sim.operator.alpha,value=

key=gsm.sim.operator.iso-country,value=

key=gsm.sim.state,value=UNKNOWN

key=adb.connected,value=1

 

相关文章推荐

Android属性系统(转)

转自http://my.unix-center.net/~Simon_fu/?p=957  属性(property)系统对Android来说是一个重要的功能。他作为一个系统服务管理着系统的配置和状态...

Android属性系统分析

  • 2015年12月29日 08:27
  • 1.17MB
  • 下载

Java反射获取Android系统属性值

目录反射定义为何需要反射反射方法Method getDeclaredMethod方法getMethod方法参数解释invoke方法 Android 反射应用 反射定义 ...

Android 中使用 getprop、watchprops 和 setprop 命令查看和更改系统属性值

【前言】     使用 adb 连接到 Android 系统时,要想实时查看和更改系统属性,可以使用 setprop、wathprops、setprop 这几个命令。 【功能及用法】  ...

Android系统属性分析ro.persist.

Android 系统属性SystemProperty分析 Android System Property 一 System Property   代码中大量存在:SystemPr...

给android系统添加自己想要的属性

android源码开发中,常常要用到一些全局标志或者说变量,这时候我们可以给android系统添加自己想要的属性。 1.Settings.system 这种系统属性我们经常用到,例如飞行模...

Android属性系统之build.prop的生成

转自:http://blog.csdn.net/zhandoushi1982/article/details/7378264 简要分析一下build.prop是如何生成的。Android的bui...
  • muojie
  • muojie
  • 2012年12月19日 15:31
  • 531

Android 属性系统 详解

Android中保存了很多系统属性值,比如手机的操作系统版本号ro.build.version.release,SDK版本号ro.build.vrsion.sdk,芯片型号ro.chipname;用于...

Android 的系统属性(SystemProperties)设置分析

Android 的系统属性包括两部分:文件保存的持久属性和每次开机导入的cache属性。前者主要保存在下面几个文件中: bionic/libc/include/sys/_system_prope...
  • jmeesky
  • jmeesky
  • 2013年04月08日 20:02
  • 364
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android的属性系统(转)
举报原因:
原因补充:

(最多只允许输入30个字)