Android System Property分析(1):property接口
2015-11-16 15:41
1186 查看
属性系统是android的一个重要特性,它作为一个服务运行在init中,管理系统配置和状态。
1. 命令行使用property方法:
getprop <key>
setprop <key> <value>
2. init.rc中使用property方法:
setprop <key> <value>
setprop命令对应的函数为do_setprop,此函数先调用expand_props对“{}”进行处理,然后调用property_set设置属性
3. java层使用property方法:
./frameworks/base/core/java/android/os/SystemProperties.java中定义了操作property的java层接口
4. c层接口
命令行,init command,java最终都调用了c层接口,在分析c层接口的实现之前需要先分析property的初始化和架构。
1. 命令行使用property方法:
getprop <key>
// ./system/core/toolbox/getprop.c if (argc == 1) { list_properties(); // 没有参数时,调用property_list列出所有的属性。 } else { // 调用property_get获取属性</span> property_get(argv[1], value, default_value); }
setprop <key> <value>
// ./system/core/toolbox/setprop.c // 调用property_set设置属性 if(property_set(argv[1], argv[2])){ fprintf(stderr,"could not set property\n"); return 1; }
2. init.rc中使用property方法:
setprop <key> <value>
setprop命令对应的函数为do_setprop,此函数先调用expand_props对“{}”进行处理,然后调用property_set设置属性
int do_setprop(int nargs, char **args){ // 处理{} ret = expand_props(prop_val, value, sizeof(prop_val)); property_set(name, prop_val); return 0; }示例:setprop sys.usb.state ${sys.usb.config}
3. java层使用property方法:
./frameworks/base/core/java/android/os/SystemProperties.java中定义了操作property的java层接口
public static String get(String key, String def); public static int getInt(String key, int def); public static long getLong(String key, long def); public static boolean getBoolean(String key, boolean def); public static void set(String key, String val);具体实现都调用./frameworks/base/core/jni/android_os_SystemProperties.cpp中的native方法来实现。
static jint SystemProperties_get_int(JNIEnv *env, jobject clazz, jstring keyJ, jint defJ){ len = property_get(key, buf, ""); // 调用property_get获取属性值 error: return result; }
static void SystemProperties_set(JNIEnv *env, jobject clazz, jstring keyJ, jstring valJ){ err = property_set(key, val); // 调用property_set设置属性</span> env->ReleaseStringUTFChars(keyJ, key); if (valJ != NULL) { env->ReleaseStringUTFChars(valJ, val); } if (err < 0) { jniThrowException(env, "java/lang/RuntimeException", "failed to set system property"); } }
4. c层接口
int property_get(const char *key, char *value, const char *default_value); /* property_set: returns 0 on success, < 0 on failure */ // ./system/core/libcutils/properties.c int property_set(const char *key, const char *value); int property_list(void (*propfn)(const char *key, const char *value, void *cookie), void *cookie);
命令行,init command,java最终都调用了c层接口,在分析c层接口的实现之前需要先分析property的初始化和架构。
相关文章推荐
- Android Studio导入第三方库报错处理
- 分享五种Android常用布局方式
- Android ListView中设置的字体颜色显示错乱问题 && SparseArray<E>的使用
- Android Adb指令
- Android-自定义可滑动开关控件之SlidingSwitchView
- Android启动icon切图大小
- Android不规则点击区域详解
- Android启动icon切图大小
- 转载 android service 使用以及aidl使用
- android 配置ndk
- 怎么为DragonBoard 410c定制Android系统
- android 签名、混淆打包网址链接
- android定位:获取当前位置的经纬度
- Android 调用系统拍照及相册裁剪后作为头像,兼容到5.0
- 基于Android代码实现常用布局
- Android Fragment 间通信
- 【android studio】 the logging tag can be at most 23 characters
- Android 自定义View
- Android RSA加密
- Android代码实现图片和文字上下布局