`
xumin_minzi
  • 浏览: 41462 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

android默认属性

阅读更多
网上有一篇文章介绍了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函数代码如下:

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 = 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; 

}

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 = 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_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可以枚举所有的属性,下面是一段打印所有属性的代码。

view plaincopy to clipboardprint?

#include  

#include  

void print_prop(const char* key,const char* value,void* cookie) 



    printf("key=%s,value=%s\n",key,value); 





int main() 



    property_list(print_prop,NULL); 

}

#include

#include

void print_prop(const char* key,const char* value,void* cookie)

{

printf("key=%s,value=%s\n",key,value);

}

int main()

{

property_list(print_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_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首次开机默认进入客户要求的桌面

    1. **AndroidManifest.xml配置**:每个Android应用都有一个AndroidManifest.xml文件,其中声明了应用的所有组件(如Activity、Service等)及其属性。要让设备开机后默认启动特定的桌面应用,我们需要在这个文件中...

    Android 取消系统默认 launcher3的home属性,保证第三方的launcher正常使用.patch

    Android 取消系统默认 launcher3的home属性,保证第三方的launcher正常使用.patch

    Android 自定义属性及其引用

    在Android中,系统的`Toast`默认只提供了一定的显示时长,但通过自定义属性,我们可以轻松创建一个具有自定义持续时间的吐司: ```xml // CustomToast类 public class CustomToast extends Toast { public ...

    android默认Toast,各种自定义Toast

    这里,我们设置了`gravity`属性为`Gravity.TOP | Gravity.CENTER_HORIZONTAL`,使Toast位于屏幕顶部且水平居中。 ### 3. 自定义Toast的样式 自定义Toast样式主要是通过修改Toast的布局来实现的。首先,我们需要...

    android checkbox 的isChecked属性

    android:checked="true" /> // 默认选中 ``` 6. **与数据绑定** 在使用数据绑定或者MVVM架构时,`isChecked`属性可以与ViewModel中的布尔变量进行双向绑定,实现UI状态和数据模型之间的同步。例如,使用Data ...

    Android TextView 去掉自适应默认的fontpadding的实现方法

    最近在项目中使用textview时发现在使用Android:layout_height=”wrap_content”这个属性设置后,textview会有默认的padding,也就是fontpadding。这样就会造成textview和其他view中间的间距会比自己的设置的大。那么...

    Android_XML属性大全

    ### Android XML 属性详解 #### 一、概览 在Android开发中,XML文件用于定义应用界面布局和其他配置信息。为了更好地控制应用的行为和外观,开发者可以利用一系列强大的XML属性来定制自己的应用。本文将详细介绍...

    android TextView属性讲解

    ### Android TextView 属性详解 在Android开发中,`TextView`是一个极为常见的组件,主要用于显示文本信息。它提供了丰富的属性,让开发者能够灵活地控制文本的显示样式和行为。以下是对`TextView`部分关键属性的...

    android_textview的属性.zip_android_android 属性

    默认情况下,TextView会自动换行,但若想限制为单行,可设置`android:singleLine="true"`。 7. **行间距**: `android:lineSpacingMultiplier`用于调整行间距,值大于1会增加间距,小于1会减少间距。例如:`...

    AttrTest android自定义属性

    它们允许开发者扩展Android系统默认的属性系统,为自定义组件添加额外的配置选项。本实例将带你深入理解如何在Android中创建和使用自定义属性。 首先,我们需要在项目的`res/values`目录下创建一个XML资源文件,...

    Android默认头像那些事儿配套资源

    "Android默认头像那些事儿配套资源" 提供了一种处理Android应用中默认头像的方法。这个资源可能包含了一个简单的示例项目——DefaultAvatarDemo,用于演示如何创建和展示默认的用户头像。这篇文章的作者通过CSDN分享...

    Android控件属性

    1.背景色: listView设置背景色android:background="@drawable/bg",拖动或者点击list空白位置的时候...cacheColorHint的属性,在黑色主题下默认的颜色值是#191919,所以就出现了刚才的画面,有一半是黑色的........

    Android之listview属性

    - `android:stackFromBottom="true"` 使ListView默认显示在底部,这意味着最新添加的数据会始终位于屏幕可见区域。这对于实时更新信息的应用场景特别有用,比如聊天应用。 2. **transcriptMode属性**: - `...

    android 默认安装apk 到sdcard

    同时,为了兼容不同的Android版本,需要在清单文件中声明`android:installLocation`属性: ```xml android:allowBackup="true" android:installLocation="preferExternal" <!-- 这里设置为 "preferExternal" -...

    Android中单选框RadioButton修改默认图片

    以下将详细讲解如何在Android中修改`RadioButton`的默认图片。 首先,我们需要创建自定义的`RadioButton`样式。这通常在`res/values/styles.xml`文件中完成。你可以定义一个新的风格,比如命名为`...

    Android自定义属性实现带边框效果的TextView

    在上述代码中,`app:`前缀表示使用的是自定义属性,而不是Android系统的默认属性。`android:`前缀则用于设置TextView的基本属性,如文字内容和尺寸。 通过这种方式,我们成功地实现了带边框效果的TextView。同时,...

    Android activity属性设置大全.doc

    以下是对Android activity属性的详细解释: 1. android:allowTaskReparenting=["true" | "false"] 这个属性决定是否允许activity在不同的任务(task)之间移动。如果设置为"true",activity可以在用户导航时改变其...

    android之属性动画和布局动画demo

    属性动画(Property Animation)和布局动画(Layout Animation)是Android系统提供的重要动画机制,用于创建丰富的视觉效果。本篇将深入探讨这两种动画类型,以及如何通过`ObjectAnimator`、`LayoutTransition`和`...

Global site tag (gtag.js) - Google Analytics