android系统属性设置

钟逸 48 2024-05-11 06:51:27

Android属性系统简介及使用

Android里有很多属性(property),每个属性都有一个名称和值,他们都是字符串格式。这些属性定义了 Android系统的一些公共系统属性。借用大神的一句话,系统属性就是真·全局变量

属性变更的请求时init事件循环处理的另一个事件,在Android平台中,为了让运行中的所有进程共享系统运行时所需要的各种设置值,系统开辟了属性存储区域,并提供了访问该区域的API。属性由键(key)与值(value)构成,其表现形式为“键=值”。

在Android平台中,在访问属性值时,添加了访问权限控制,增强了访问的安全性。系统中所有运行中的进程都可以访问属性值,但仅有init进程才能修改属性值。其他进程修改属性值时,必须向init进程提出请求,最终由init进程负责修改属性值。在此过程中,init进程会先检查各属性的访问权限,而后再修改属性值。

当属性值更改后,若定义在init.rc文件中的某个特定条件得到满足,则与此条件相匹配的动作就会发生,每个动作都有一个触发器,决定动作的执行时间,记录在“on property”关键字后的命令即被执行。

个人看来属性系统有一下四个优点,当然缺点也很明显,只能支持三种基本类型:string、int、boolean

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

以上就是 properties.h中申明的所有方法,其中 property_set返回 0表示执行成功,返回值<0表示失败。

java层调用/frameworks/base/core/java/android/os/SystemProperties.java中的 set和 get方法即可设置和获取系统属性

通过 JNI最终调用的还是/system/core/libcutils/properties.c中的 property_get和 property_set

Android toolbox程序提供了两个工具: setprop和 getprop获取和设置属性。其使用方法:

可以通过命令adb shell: getprop查看手机上所有属性状态值。

默认情况下,设置属性只会使"init"守护程序写入共享内存,它不会执行任何脚本或二进制程序。但是,您可以将您的想要的实现的操作与init.rc中某个属性的变化相关联.例如,在默认的init.rc中有:

这样,如果你设置persist.service.adb.enable为1,"init"守护程序就知道需要采取行动:开启adbd服务。

只有有权限的进程才能修改属性,要不随便写一个就改系统属性那当黑客也太容易了。权限相关定义在下面两个文件里:

其实一般应用程序都不会去修改系统属性,所以也不用太在意。

在开机启动后的init操作中,会执行一个loop循环,当检测到有新的设置时,进入设置流程,鉴权失败会提示相关的异常,如sys_prop: permission denied uid:1000 name:gsm.phone.id

通过以上介绍我们可以了解什么是系统属性,如何使用,以及一些需要注意的地方。后面会详细介绍相关原理。

上一篇:深圳棋牌游戏开发公司
下一篇:梦幻西游手游版本冲突
相关文章
返回顶部小火箭