System.getProperty(param)返回错误的值 - Android

时间:2013-06-05 15:55:48

标签: java android shell

我做的步骤:

我在代码

System.setProperty("myproperty", 1);

然后我在shell脚本中将属性“myProperty”设置为3。 像这样:

# setprop "myproperty" 3

然后在代码中我尝试读取这样的属性:

System.getProperty("myproperty");

我得到值1.这意味着shell中的集合实际上不起作用。 但是当我用shell打印所有道具

# getprop

我在列表中看到myproperty等于3。

用简短的话来说:我想从脚本中更改属性的值,我发现这些脚本实际上更改了属性,但在java代码中我得到了旧值。

任何想法?

3 个答案:

答案 0 :(得分:13)

Android中的Java代码在java库中提供System.getProperty和System.setProperty函数,但重要的是要注意尽管这些java API在语义上等同于本机版本,但java版本将数据存储在完全不同的位置。实际上,dalvik VM使用哈希表来存储属性。因此,java属性是分开的,它不能获取或设置本机属性,反之亦然。

您可以使用android.os.SystemProperties类可以操作本机属性,但它仅供内部使用。它通过jni调用本机属性库来获取/设置属性。

答案 1 :(得分:5)

getprop / setprop适用于android.os.SystemProperties,而不是java.lang.System

不幸的是,这个类不适用于第三方应用程序。显然你已经植根了你的设备,所以你仍然可以访问它。

答案 2 :(得分:0)

您可以使用该代码段作为shell命令运行getProp并获取任何属性的值:

private String getSystemProperty(String propertyName) {
    String propertyValue = "[UNKNOWN]";

    try {
        Process getPropProcess = Runtime.getRuntime().exec("getprop " + propertyName);

        BufferedReader osRes =
                new BufferedReader(new InputStreamReader(getPropProcess.getInputStream()));

        propertyValue = osRes.readLine();

        osRes.close();
    } catch (Exception e) {
        // Do nothing - can't get property value
    }

    return propertyValue;
}