博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Property实现介绍
阅读量:4050 次
发布时间:2019-05-25

本文共 2795 字,大约阅读时间需要 9 分钟。

1. property应用例子

Java:
import android.os.SystemProperties;
SystemProperties.get("persist.sys.usb.config", "mtp,adb");
SystemProperties.getBoolean("ro.adb.secure", false);
SystemProperties.set("sys.usb.config", config);
SystemProperties.set需要有system权限,可以这么做
a. 在Android.mk中,加上LOCAL_CERTIFICATE :=platform
b. 在AndroidManifest.xml中,加上android:sharedUserId="android.uid.system"

Native C:

#include <cutils/properties.h>
LOCAL_SHARED_LIBRARIES := \
 libcutils
 
int property_set(const char *key, const char *value)
int property_get(const char *key, char *value, const char *default_value)
property_set("service.adb.root", "1");
property_get("ro.debuggable", value, "")

 

2. 设置属性的调用过程

SystemProperties.set in Java 
  set frameworks/base/core/java/android/os/SystemProperties.java
     native_set(key, val)
       SystemProperties_set  frameworks/base/core/jni/android_os_SystemProperties.cpp
          property_set    /system/core/libcutils/properties.c

setprop in .rc/.sh file

  setprop_main  system/core/toolbox/setprop.c
     property_set  /system/core/libcutils/properties.c

property_set    /system/core/libcutils/properties.c

HAVE_LIBC_SYSTEM_PROPERTIES  #define HAVE_LIBC_SYSTEM_PROPERTIES 1 in build/core/combo/include/arch/linux-arm/AndroidConfig.h
  __system_property_set   bionic/libc/bionic/system_properties.c
     send_prop_msg(PROP_MSG_SETPROP)
       handle_property_set_onfd(case PROP_MSG_SETPROP)  system/core/init/property_service.c
         检查权限
         if "ctl." 开头  handle_control_message()   system/core/init/init.c
              ctrl.start   msg_start()     启动service
              ctrl.stop    msg_stop()      停止service
              ctrl.restart msg_restart()   重启service
         else property_set()
             如果能找到且以ro开头,就返回-1;能找到且不以ro开头调用 __system_property_update()
             如果找不到则调用__system_property_add()
             如果是"net."开头,调用property_set("net.change", name)
             如果以"persist."开头,调用write_persistent_property();
             property_changed(name, value);
除了"persist."开头的property,关机后值会消失;以"persist."开头的会保存在/data/property目录下一文件里,可以看write_persistent_property()

 

3. 属性的初始值

从下面一些文件可以得到属性的初始值
void start_property_service(void)
{
...
    load_properties_from_file(PROP_PATH_SYSTEM_BUILD);
    load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT);
    load_override_properties();
    /* Read persistent properties after all default values have been loaded. */
    load_persistent_properties();
...
#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"

 

4. 属性的权限

如果是serice, 调用check_control_perms()检查权限,可以看看control_perms[]
如果是其他属性,调用check_perms()检查权限,可以看看property_perms[]

 

5. property_changed()  system/core/init/init.c

void property_changed(const char *name, const char *value)
{
    if (property_triggers_enabled)
        queue_property_triggers(name, value);
}
              
queue_property_triggers()
   action_add_queue_tail(act)
  
设置完属性后,会调用on property相应的action,  可以看看init.rc

转载地址:http://lfici.baihongyu.com/

你可能感兴趣的文章
为什么读了很多书,却学不到什么东西?
查看>>
长文干货:如何轻松应对工作中最棘手的13种场景?
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
No.174 - LeetCode1305 - 合并两个搜索树
查看>>
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql truncate (清除表数据)
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt5 everywhere 编译summary
查看>>
qt 创建异形窗体
查看>>
简单Linux C线程池
查看>>
内存池
查看>>
输入设备节点自动生成
查看>>