原贴网址:

http://blog.csdn.net/jackyu613/article/details/6136620


属性系统是android的一个重要特性。它作为一个服务运行,管理系统配置和状态。所有这些配置和状态都是属性。每个属性是一个键值对(key/value pair),其类型都是字符串。

        从功能上看,属性与windows系统的注册表非常相似。许多android应用程序和库直接或者间接地依赖此特性,以决定它们的运行时行为。例如,adbd进程查询属性服务已确认当前是否运行在模拟器环境中。另一个例子是java.io.File.pathSpearator,其返回存储于属性服务中的值。


如何读取/设置属性

Android上有三种主要途径来get/set属性。

1、  native code

当编写本地应用程序时,可以使用property_get和property_set 这两个API来读取/设置属性。要使用它们,我们需要include cutils/properties.h,并链接libcutils库。

2、  java code

在Java包(java.lang.System)中提供有System.getProperty和System.setProperty方法。但值得注意的是,尽管这两个API在语义上等同native函数,但其将数据存储于完全不同的位置。实际上,dalvik VM使用一个哈希表来存储这些属性。所以,用这两个API存储的属性是独立的,不能存取native属性,反之亦然。

然而Android有一个内部隐藏类(@hide,对SDK不可见)android.os.SystemProperties来操纵native属性。其通过jni来存取native属性库。

3、  shell脚本

Android提供getprop和setprop命令行工具来获取和更新属性。其依赖libcutils实现。


设置属性的权限

对于native属性(Android系统属性),Android系统在以下两个地方进行权限管理:

1、external/sepolicy/property_contexts中,定义了不同前缀的系统属性,对应能够修改的应用权限;

2、system/core/init/property_service.c中,property_perms数组中定义了当前系统上可用的所有属性的前缀,以及相对应的存取权限UID。对属性的设置要满足权限要求,同时命名也要在这些定义的范围内。(5.0以上系统已弃用


PS:

system/core/init/property_service.c中:

1、  PROP_NAME_MAX(默认32)指定了一个属性的key最大允许长度;PROP_VALUE_MAX(默认92)则指定了value的最大允许长度。



更多相关文章

  1. Android高手进阶教程(四)之----Android(安卓)中自定义属性(attr.
  2. android EditText中inputType的属性列表
  3. Android权限管理之Permission权限机制及使用
  4. android layout,xml属性介绍
  5. Android(安卓)Architecture
  6. Android(安卓)Studio gradle配置详解
  7. android属性详解
  8. Android(安卓)中自定义属性(attr.xml,TypedArray)的使用
  9. Android中UI组件android:layout_gravity属性的使用

随机推荐

  1. Android多媒体扫描过程(Android(安卓)Medi
  2. Android(安卓)SDK的docs访问速度很慢
  3. Android使用ViewPager实现左右滑动效果
  4. i-jetty环境搭配与编译
  5. Android(安卓)Logcat 直接输出JSON格式的
  6. 再看Android(安卓)屏幕切换引起的生命周
  7. pull解析
  8. Android(安卓)/ iOS 静态代码扫描工具调
  9. android开发之给LinearLayout增加点击效
  10. Android常用开源框架