【发布时间】:2012-04-13 19:00:13
【问题描述】:
如何在没有 root 访问权限的情况下获取在 /system/build.prop 中找到的 build.prop 值?如何编辑它们?
【问题讨论】:
标签: android
如何在没有 root 访问权限的情况下获取在 /system/build.prop 中找到的 build.prop 值?如何编辑它们?
【问题讨论】:
标签: android
您可能可以考虑在您的应用程序中使用@kangear 建议的SystemProperties.get("someKey"),使用如下反射:
public String getSystemProperty(String key) {
String value = null;
try {
value = (String) Class.forName("android.os.SystemProperties")
.getMethod("get", String.class).invoke(null, key);
} catch (Exception e) {
e.printStackTrace();
}
return value;
}
然后你可以在任何地方使用它:
getSystemProperty("someKey");
【讨论】:
试试这个
static String GetFromBuildProp(String PropKey) {
Process p;
String propvalue = "";
try {
p = new ProcessBuilder("/system/bin/getprop", PropKey).redirectErrorStream(true).start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
propvalue = line;
}
p.destroy();
} catch (IOException e) {
e.printStackTrace();
}
return propvalue;
}
【讨论】:
System.getProperty() 有帮助吗?作为替代方案,您可以在 Process 中执行 getprop 并检索其输出。
【讨论】:
/system/build.prop 中检索属性。
adb shell getprop 时是否看到该属性?
getprop 并检索其输出。
如:
SystemProperties.get("ro.rksdk.version")
【讨论】:
android.os.SystemProperties。
使用 android.os.Build 类,见http://developer.android.com/reference/android/os/Build.html,但是没有root权限你不能编辑它。
【讨论】:
我检查了多台设备,包括一些三星和 LG 设备以及 Nexus 4,最新的是配备 Android 6.0 的 Nvidia Shield 平板电脑。 在 /system/build.prop 上的所有设备上都给了我这个结果(当然,build.prop 的大小和日期不同):
-rw-r--r-- root root 3069 2015-10-13 21:48 build.prop
这意味着没有任何权限的任何人和任何应用程序都可以读取该文件。只有在写入非“ro.”值时才需要 Root。您可以创建一个新的 BufferedReader(new FileReader("/system/build.prop")) 并读取所有行。
这种方法的优点:
缺点:
【讨论】:
在你的文件管理器的设置页面,将home设置为/system,然后你可以浏览系统文件夹并将build.prop复制并粘贴到sdcard。我仍在尝试 root 我的手机,但我在调整过程中没有问题(没有双关语)。
【讨论】:
使用隐藏 API 上的反射读取属性:
static public String getprop(String key){
try { Class c = Class.forName("android.os.SystemProperties");
try { Method method = c.getDeclaredMethod("get", String.class);
try { return (String) method.invoke(null, key);
} catch (IllegalAccessException e) {e.printStackTrace();}
catch (InvocationTargetException e) {e.printStackTrace();}
} catch (NoSuchMethodException e) {e.printStackTrace();}
} catch (ClassNotFoundException e) {e.printStackTrace();}
return null;
}
要手动编辑它们(需要 Root),您应该使用 adb 提取它们:
adb pull /system/build.prop
在计算机上编辑它们,然后“安装”新的 build.prop:
adb push build.prop /sdcard/
adb shell
mount -o rw,remount -t rootfs /system
cp /sdcard/build.prop /system/
chmod 644 /system/build.prop
保留原始 build.prop 副本会更安全。
【讨论】: