我做的步骤:
我在代码
System.setProperty("myproperty", 1);
然后我在shell脚本中将属性“myProperty”设置为3。 像这样:
# setprop "myproperty" 3
然后在代码中我尝试读取这样的属性:
System.getProperty("myproperty");
我得到值1.这意味着shell中的集合实际上不起作用。 但是当我用shell打印所有道具
时# getprop
我在列表中看到myproperty等于3。
用简短的话来说:我想从脚本中更改属性的值,我发现这些脚本实际上更改了属性,但在java代码中我得到了旧值。
任何想法?
答案 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;
}