android properties分析(2) 应用层 properties设置和获取接口分析

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:39   1566   0

命令行 properties设置和获取接口分析

代码在system/core/toolbox/

getprop.c

setprop.c

看code,实际就是调用C code中的接口,getprop也是一样的

#include <cutils/properties.h>
int setprop_main(int argc, char *argv[])
{
if(argc != 3) {
fprintf(stderr,"usage: setprop <key> <value>\n");
return 1;
}
if(property_set(argv[1], argv[2])){
fprintf(stderr,"could not set property\n");
return 1;
}
return 0;
}

Java code properties设置和获取的接口:

以get为例,实际调用native_get

public static String get(String key) {
if (key.length() > PROP_NAME_MAX) {
throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX);
}
return native_get(key);
}

会调用frameworks/base/core/jni/android_os_SystemProperties.cpp

static void SystemProperties_set(JNIEnv *env, jobject clazz,
jstring keyJ, jstring valJ)
{
key = env->GetStringUTFChars(keyJ, NULL);
if (valJ == NULL) {
val = ""; /* NULL pointer not allowed here */
} else {
val = env->GetStringUTFChars(valJ, NULL);
}
err = property_set(key, val);
}

最终还是调用C code的接口property_set


C code properties设置和获取的接口:

JAVA和命令行最终都是调用C code的接口。

system/core/libcutils/properties.c

在Code里使用了两个宏,三种实现方法:

#if HAVE_LIBC_SYSTEM_PROPERTIES

使用Bionic C中system_properties实现

#include <sys/_system_properties.h>

int property_set(const char *key, const char *value)
{
return __system_property_set(key, value);
}

#elseif HAVE_SYSTEM_PROPERTY_SERVER

以Server的方式实现

#define SYSTEM_PROPERTY_PIPE_NAME "/tmp/android-sysprop"

gPropFd = connectToServer(SYSTEM_PROPERTY_PIPE_NAME);

#else

采用环境变量的方式实现

#endif


在高通的代码中,采用SYSTEM_PROPERTIES的方式实现的,因此只介绍该方法

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP