Android Systemproperties Android系统属性

来源:互联网 发布:淘宝宝贝主图尺寸大小 编辑:程序博客网 时间:2024/05/17 23:17

  • 前言
  • Android系统属性的特性
  • Android系统属性的通用配置
  • Android系统属性的使用
  • Next

前言

我们在Android开发中常常会用到一些用于控制我们应用/系统特性的方法。例如:通过标志位、通过系统属性、通过Android版本、通过系统Settings、通过系统级别的资源等等。我们这里着重介绍一下Android系统属性。

Android系统属性的特性

  • 大部分属性本次开机有效
  • ro开头的属性只能被设置一次
  • persist开头的属性设置之后是被保存在存储空间中的,重启之后,仍然生效//
  • 不同的系统属性属于不同的用户组,处在当前用户组的进程不能设置属于其他用户组的系统属性.
  • 总的系统属性所占用的空间是有限制的 bionic/libc/include/sys/_system_properites.h #define PA_SIZE (128*1024)
  • 设置系统属性的权限是没有开放给第三方应用的,即就是说设置系统属性的接口是隐藏的。当然你也可以通过NDK的方式来访问
  • 由系统加载的.prop文件路径定义如下
    #define PROP_SERVICE_NAME "property_service"    #define PROP_PATH_RAMDISK_DEFAULT  "/default.prop"    #define PROP_PATH_SYSTEM_BUILD     "/system/build.prop"    #define PROP_PATH_SYSTEM_DEFAULT   "/system/default.prop"    #define PROP_PATH_LOCAL_OVERRIDE   "/data/local.prop"
  • persist开头的属性,会被存储在#define PERSISTENT_PROPERTY_DIR “/data/property”“

Android系统属性的通用配置

system/core/include/private/android_filesystem_config.h

#define AID_ROOT             0  /* traditional unix root user */#define AID_SYSTEM        1000  /* system server */#define AID_RADIO         1001  /* telephony subsystem, RIL */#define AID_BLUETOOTH     1002  /* bluetooth subsystem */#define AID_GRAPHICS      1003  /* graphics devices */#define AID_INPUT         1004  /* input devices */#define AID_AUDIO         1005  /* audio devices */#define AID_CAMERA        1006  /* camera devices */#define AID_LOG           1007  /* log devices */#define AID_COMPASS       1008  /* compass device */#define AID_MOUNT         1009  /* mountd socket */#define AID_WIFI          1010  /* wifi subsystem */#define AID_ADB           1011  /* android debug bridge (adbd) */#define AID_INSTALL       1012  /* group for installing packages */#define AID_MEDIA         1013  /* mediaserver process */#define AID_DHCP          1014  /* dhcp client */#define AID_SDCARD_RW     1015  /* external storage write access */#define AID_VPN           1016  /* vpn system */#define AID_KEYSTORE      1017  /* keystore subsystem */#define AID_USB           1018  /* USB devices */#define AID_DRM           1019  /* DRM server */#define AID_MDNSR         1020  /* MulticastDNSResponder (service discovery) */#define AID_GPS           1021  /* GPS daemon */

system/core/init/property_service.c

/* White list of permissions for setting property services. */struct {    const char *prefix;    unsigned int uid;    unsigned int gid;} property_perms[] = {    { "net.rmnet0.",      AID_RADIO,    0 },    { "net.lte",          AID_RADIO,    0 },    { "persist.radio",    AID_RADIO,    0 },    { "net.dns",          AID_RADIO,    0 },    { "sys.usb.config",   AID_RADIO,    0 },    { "net.",             AID_SYSTEM,   0 },    { "dev.",             AID_SYSTEM,   0 },    { "runtime.",         AID_SYSTEM,   0 },    { "hw.",              AID_SYSTEM,   0 },    { "sys.",             AID_SYSTEM,   0 },    { "sys.powerctl",     AID_SHELL,    0 },    { "service.",         AID_SYSTEM,   0 },    { "wlan.",            AID_SYSTEM,   0 },    { "gps.",             AID_GPS,      0 },    { "bluetooth.",       AID_BLUETOOTH,   0 },    { "dhcp.",            AID_SYSTEM,   0 },    { "dhcp.",            AID_DHCP,     0 },    { "debug.",           AID_SYSTEM,   0 },    { "debug.",           AID_SHELL,    0 },    { "log.",             AID_SHELL,    0 },    { "service.adb.root", AID_SHELL,    0 },    { "service.adb.tcp.port", AID_SHELL,    0 },    { "persist.logd.size",AID_SYSTEM,   0 },    { "persist.sys.",     AID_SYSTEM,   0 },    { "persist.service.", AID_SYSTEM,   0 },    { "persist.security.", AID_SYSTEM,   0 },    { "persist.gps.",      AID_GPS,      0 },    //......    { NULL, 0, 0 }};

Android系统属性的使用

Systemproperties类在android.os下,但这个类是隐藏的。因此对于独立的第三方APP来说是无法直接调用的,当然你可以通过反射来使用。用JNI的方式,可以绕过Systemproperties这个类,直接本地调用来实现创建、获取及修改系统属性。
创建与修改android属性用Systemproperties.set(name, value),获取android属性用Systemproperties.get(name),需要注意的是android属性的名称是有一定的格式要求的,如下:前缀必须用system\core\init\property_service.c中定义的前缀,进行系统属性设置的程序也必须有system或root权限,
如何将android程序的权限提升到system权限?方法是这样的:

  1. 在AndroidManifest.xml中,在manifest加入android:sharedUserId=”android.uid.system”
  2. 在Android.mk中,將LOCAL_CERTIFICATE := XXX修改成LOCAL_CERTIFICATE :=platform

Next

接下来将着重关注Android 的系统设置,以及针对系统属性进行深入的解析。

0 0
原创粉丝点击