【问题标题】:System.getProperty(param) returns wrong value - AndroidSystem.getProperty(param) 返回错误值 - Android
【发布时间】:2013-06-01 10:08:47
【问题描述】:

我做的步骤:

我在代码中做

System.setProperty("myproperty", 1);

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

# setprop "myproperty" 3

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

System.getProperty("myproperty");

我得到的值为 1。这意味着 shell 中的设置实际上并没有工作。 但是当我用

从 shell 打印所有道具时
# getprop

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

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

有什么想法吗?

【问题讨论】:

  • System.getProperty("myProperty")System.getProperty("myproperty") 不同。
  • @kocko 这不是问题,我只是在这里打错了。
  • @LeeMeador 我说的是安卓

标签: java android shell


【解决方案1】:

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

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

【讨论】:

  • 我在 /android/framework/base 工作,所以这不是问题,我可以在那里使用这个类。谢谢你的帮助。
【解决方案2】:

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

很遗憾,该类不适用于第三方应用程序。显然你已经root了你的设备,所以你仍然可以访问它。

【讨论】:

  • 你只需要Java反射,使用这个类不需要root。仍然适用于棒棒糖。
【解决方案3】:

您可以使用该 sn-p 作为 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 2012-01-29
    • 1970-01-01
    • 2021-07-27
    • 2011-08-03
    • 1970-01-01
    • 2019-02-03
    相关资源
    最近更新 更多