`

Android属性(property)机制

 
阅读更多
1. 属性简介

Android里有很多属性(property),每个属性都有一个名称和值,他们都是字符串格式。这些属性定义了Android系统的一些公共系统属性。比如:

[dalvik.vm.dexopt-flags]: [m=y]

[dalvik.vm.heapgrowthlimit]: [48m]

[gsm.operator.iso-country]: []

[gsm.operator.isroaming]: [false]

[gsm.operator.numeric]: []

[gsm.sim.operator.alpha]: []

[gsm.sim.operator.iso-country]: []

[gsm.sim.operator.numeric]: []

这些属性多数是开机启动时预先设定的,也有一些是动态加载的。

系统启动时以下面的次序加载预先设定属性:

/default.prop

/system/build.prop

/system/default.prop

/data/local.prop

/data/property/*

后加载的如果有重名的则覆盖前面的。

有两种属性值得一提:

persist.* : 以persist开始的属性会在/data/property存一个副本。也就是说,如果程序调property_set设了一个以persist为前缀的属性,系统会在/data/property/*里加一个文件记录这个属性,重启以后这个属性还有。如果property_set其它属性,因为属性是在内存里存,所以重启后这个属性就没有了。

ro.* :以ro为前缀的属性不能修改。



2. 应用程序属性使用方法

在java应用里设置属性:

import android.os.SystemProperties;

SystemProperties.set("persist.sys.country",”china”);

在java里取得属性:

String vmHeapSize = SystemProperties.get("dalvik.vm.heapgrowthlimit", "24m");

也可以用SystemProperties.getBoolean,getInt等。



在native C中设置属性:

#include "cutils/properties.h"

property_set("vold.decrypt", "trigger_load_persist_props");

在C中取得属性:

  char encrypted_state[32];

  property_get("ro.crypto.state", encrypted_state, "");

最后一个参数是默认值。



3. 启动脚本中属性使用方法

一般property启动应该加在init.<your hardware>.rc而不是直接init.rc里。下面是一个init.rc里的例子:

# adbd on at boot in emulator

on property:ro.kernel.qemu=1

start adbd

意思是如果ro.kernel.qemu=1,也就是当前是模拟器的话,则启动adb服务。



4. property权限

只有有权限的进程才能修改属性,要不随便写一个就改系统属性那当黑客也太容易了。

权限在system/core/init/property_service.c里定义:

property_perms[] = {

    { "net.rmnet0.",      AID_RADIO,    0 },

    { "net.gprs.",        AID_RADIO,    0 },

    { "net.ppp",          AID_RADIO,    0 },

    { "net.qmi",          AID_RADIO,    0 },

    { "ril.",             AID_RADIO,    0 },

    { "gsm.",             AID_RADIO,    0 },

    { "persist.radio",    AID_RADIO,    0 },

    { "net.dns",          AID_RADIO,    0 },

    { "net.",             AID_SYSTEM,   0 },

    { "dev.",             AID_SYSTEM,   0 },

    { "runtime.",         AID_SYSTEM,   0 },

    { "hw.",              AID_SYSTEM,   0 },

    { "sys.",             AID_SYSTEM,   0 },

    ...

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


5. 属性实现原理

属性初始化的入口点是property_init ,在system/core/init/property_service.c中定义。它的主要工作是申请32k共享内存,其中前1k是属性区的头,后面31k可以存247个属性(受前1k头的限制)。property_init初始化完property以后,加载/default.prop的属性定义。

其它的系统属性(build.prop, local.prop,…)在start_property_service中加载。加载完属性服务创建一个socket和其他进程通信(设置或读取属性)。

Init进程poll属性的socket,等待和处理属性请求。如果有请求到来,则调用handle_property_set_fd来处理这个请求。在这个函数里,首先检查请求者的uid/gid看看是否有权限,如果有权限则调property_service.c中的property_set函数。

在property_set函数中,它先查找就没有这个属性,如果找到,更改属性。如果找不到,则添加新属性。更改时还会判断是不是“ro”属性,如果是,则不能更改。如果是persist的话还会写到/data/property/<name>中。

最后它会调property_changed,把事件挂到队列里,如果有人注册这个属性的话(比如init.rc中on property:ro.kernel.qemu=1),最终会调它的会调函数。

property名字长度限制是32字节,值的限制是92字节。不知道是google怎么想的 — 一般都是名字比值长得多!比如[dalvik.vm.heapgrowthlimit]: [48m]
分享到:
评论

相关推荐

    Android属性系统分析

    Android属性系统分析知识点总结: Android属性系统是Android操作系统的核心组件之一,它为系统提供了配置和...通过深入理解Android属性系统的工作机制,开发者可以更加有效地进行Android系统的定制、优化和安全加固。

    Android属性动画超全超详细

    Android属性动画是Android SDK中的一个强大特性,它允许开发者在运行时改变对象的属性,并以平滑、连续的方式...这个示例项目是一个宝贵的资源,可以帮助开发者深入理解Android属性动画的机制,并提升应用的用户体验。

    Android属性动画基础Demo

    本教程将基于"Android属性动画基础Demo"来详细讲解属性动画的基本概念、使用方法以及核心API,帮助你理解和掌握这一技术。 属性动画与传统的帧动画和视图动画不同,它不依赖于UI线程,而是独立地更新对象的属性,...

    Android 属性动画(Property Animation) 完全解析 源码程序

    **Android属性动画(Property Animation)完全解析** 属性动画是Android 3.0(API Level 11)引入的一种新动画机制,与视图动画(View Animation)不同,它不依赖于视图的绘制过程,而是直接改变对象的属性并实时...

    android属性动画demo

    这个“android属性动画demo”涵盖了ObjectAnimator的基本用法,包括平移、旋转、尺寸变化以及透明度调整。 1. **ObjectAnimator**: ObjectAnimator是属性动画系统中的核心类,它基于值 animator(ValueAnimator)...

    android ro属性调试修改(mprop逆向)1

    "Android RO属性调试修改(mprop逆向)" Android作为一个流行的移动...通过了解init进程的实现机制和__system_property_update函数的原理,我们可以模拟mprop工具来实现RO属性的修改,从而实现Android应用程序的调试。

    Android 属性动画和帧动画例子

    Android属性动画 属性动画是Android 3.0(API级别11)引入的一种强大工具,它允许开发者对对象的属性进行动画化,而不仅仅是移动视图。属性动画系统包括三个主要组件: - `ValueAnimator`:负责计算动画的中间值...

    Android学习之 属性动画Property Animation

    【Android属性动画Property Animation详解】 Android属性动画是Android系统中的一种强大的动画框架,它能够对任何对象的属性值进行动画化处理,无论这个对象是否在屏幕上可见。这种动画机制允许开发者定义一个动画...

    Android 属性动画左右移动

    通过以上步骤,我们可以实现一个简单的Android属性动画,使对象在屏幕上左右移动。实际应用中,你可以根据需求调整动画参数,如速度、方向、重复模式等,以创造出各种有趣的效果。属性动画的强大之处在于它的灵活性...

    Android属性动画的基本用法解析

    综上所述,Android属性动画提供了强大的动画机制,允许开发者实现更加灵活和丰富的界面动态效果。理解并熟练掌握这些基本用法,将有助于提升Android应用的视觉吸引力和用户满意度。在实际项目中,可以根据CsdnDemo中...

    android动画例子:tween animation and property animation

    本文将深入探讨两种主要的Android动画类型:Tween Animation(平滑动画)和Property Animation(属性动画)。这两种技术都能为应用程序带来生动和交互性的效果,但它们的工作原理和应用场景有所不同。 **Tween ...

    Android属性动画Demo

    这个"Android属性动画Demo"是开发者为了展示如何利用属性动画实现各种高级动画效果而创建的示例项目。在这个项目中,我们可以深入学习和理解Android属性动画的工作原理和应用方式。 属性动画系统是Android 3.0(API...

    android属性动画

    以上就是关于Android属性动画的一些基础知识和实际运用。在开发过程中,熟练掌握属性动画能让你的APP更加生动活泼,提升整体质量。同时,要记得根据设备性能适当地调整动画参数,以避免过度消耗资源。

    Android属性动画实用代码

    Android属性动画是Android系统提供的一种强大的动画机制,它在API level 11及以上版本中引入,使得开发者可以对对象的属性进行平滑的改变,而不仅仅是视图的平移、旋转和缩放等简单动画。相比传统的补间动画,属性...

    Android 动画机制 补间、属性、帧动画、源码分析

    Android 动画机制 补间、属性、帧动画、源码分析 Android系统提供了很多丰富的API去实现UI的2D与3D动画,最主要的划分可以分为如下几类: * View Animation:最早提供的一种动画,用来这只view。 * Drawable ...

    Android属性动画3.0以下支持包

    在Android系统中,属性动画(Property Animation)是一个强大的机制,它允许开发者在应用程序中实现复杂的动画效果,如平移、旋转、缩放等。然而,属性动画是在Android 3.0(API级别11)及以上版本才被引入的。对于...

    android 事件监听机制

    通过理解并熟练运用Android的事件监听机制,开发者可以创建出更丰富、更具交互性的应用,如模拟飞行游戏中的飞机操控,或者其他需要精确用户输入的应用场景。不断探索和实践,是提升Android开发技能的关键。

    Android属性动画实现TextView类似支付宝余额数字滚动

    在Android开发中,属性动画(Property Animation)是一个强大的工具,它可以让我们实现许多酷炫的视觉效果,例如在本例中提到的“Android属性动画实现TextView类似支付宝余额数字滚动”。这个需求通常出现在金融类...

    android绘图机制与动画机制Demos

    Android提供了多种动画类型,包括属性动画(Property Animation)、视图动画(View Animation)和过渡动画(Transition Animation)。视图动画主要用于改变View的位置、大小和透明度等,但不会实际改变View的属性;...

Global site tag (gtag.js) - Google Analytics