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

Java System.getProperty(param)返回错误的值-Android,java,android,shell,Java,Android,Shell,我要做的步骤: 我在代码方面做得很好 System.setProperty("myproperty", 1); 然后我在shell脚本中将属性“myProperty”设置为3。 像这样: # setprop "myproperty" 3 System.getProperty("myproperty"); 然后在代码中,我尝试读取如下属性: # setprop "myproperty" 3 System.getProperty("myproperty"); 我得到1的值。这意味着外壳上的

我要做的步骤:

我在代码方面做得很好

System.setProperty("myproperty", 1);
然后我在shell脚本中将属性“myProperty”设置为3。 像这样:

# setprop "myproperty" 3
System.getProperty("myproperty");
然后在代码中,我尝试读取如下属性:

# setprop "myproperty" 3
System.getProperty("myproperty");
我得到1的值。这意味着外壳上的装置实际上不起作用。 但是当我用

# getprop
我在列表中看到myproperty等于3

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


有什么想法吗?

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


不幸的是,此类不可用于第三方应用程序。显然,您已经在设备上建立了根目录,所以您仍然可以访问它。

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


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

您可以使用该代码段作为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;
}

System.getProperty(“myProperty”)
System.getProperty(“myProperty”)
不同@kocko这不是问题,我只是在这里输入错误。@LeeMeador我说的是android在/android/framework/base中工作,所以这不是问题,我可以在那里使用这个类。谢谢你的帮助。你所需要的只是Java反射,使用这个类不需要root。仍然对棒棒糖有效。