2

我做的步骤:

我在代码中做

System.setProperty("myproperty", 1);

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

# setprop "myproperty" 3

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

System.getProperty("myproperty");

我得到的值为 1。这意味着 shell 中的设置实际上并没有工作。但是当我从外壳打印所有道具时

# getprop

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

简而言之:我想从脚本中更改属性的值,我看到这个脚本实际上更改了属性,但在 java 代码中我得到了旧值。

有任何想法吗?

4

3 回答 3

13

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

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

于 2013-06-05T16:11:50.093 回答
5

getprop/setprop 在 上工作android.os.SystemProperties,而不是在java.lang.System.

不幸的是,该类不适用于第三方应用程序。显然您已将设备植根,因此您仍然可以访问它。

于 2013-06-05T16:09:23.443 回答
1

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

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;
}
于 2017-05-30T05:44:46.670 回答