所以让我首先说这让我把头发拉得太厉害了,几乎肯定会是一个愚蠢的简单回答(按照墨菲的法律),所以请提出你可能认为我做过的任何事情。
我正在使用Android(在armo G4上使用7.1 armv7,确切地说,它是我唯一的设备,所以我无法测试任何其他内容,至少没有根,这是用例所需要的)。我正在编写一个应用程序,长话短说,需要列出文件系统。我决定为此目的使用/ proc / mounts。
在我忘记之前,我尝试将selinux设置为宽容,没有工作(虽然我怀疑selinux的本能,第二个发生的奇怪事情可能是由于我的无知)。
因此,单线程应用程序,按下按钮时会调用此静态函数。
private static String getProcMounts() {
try {
/* Forgive my Fr.. um, java */
FileInputStream procmounts = new FileInputStream("/proc/mounts");
BufferedReader mountsreader = new BufferedReader(new InputStreamReader(procmounts));
StringBuilder mountsbuilder = new StringBuilder();
String line;
while ((line = mountsreader.readLine()) != null) {
mountsbuilder.append(line).append('\n');
}
mountsreader.close();
procmounts.close();
System.out.println(mountsbuilder.toString());
return mountsbuilder.toString();
} catch (Exception e) {
Log.e("ERROR", "/proc/mounts could not be read");
return null;
}
}
所以我运行它,它运行得很好。好的,将remount remount / system作为读写。
athene:/ $ su
athene:/ # mount -o remount,rw /system
athene:/ # exit
athene:/ $ grep system /proc/mounts
/dev/block/bootdevice/by-name/system /system ext4 rw,seclabel,relatime,data=ordered 0 0
athene:/ $
很酷,现在我的应用程序:
...
01-21 18:38:20.713 11037-11037/org.sudoforlunch.mountmanager I/System.out: none /config configfs rw,relatime 0 0
01-21 18:38:20.713 11037-11037/org.sudoforlunch.mountmanager I/System.out: /dev/block/bootdevice/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0
01-21 18:38:20.713 11037-11037/org.sudoforlunch.mountmanager I/System.out: /dev/block/bootdevice/by-name/userdata /data f2fs rw,seclabel,nosuid,nodev,noatime,nodiratime,background_gc=on,user_xattr,inline_xattr,acl,inline_data,active_logs=6 0 0
...
嗯,这很奇怪( UPDATE :奇怪的是它显示ro而不是rw,尽管文件包含rw)。必须是一些奇怪的缓存机制或其他东西。再试一次。失败。尝试重新启动手机,重新安装rw,失败。尝试重新安装,在调试模式下运行,每种可能的方式清除手机,甚至将手机重置为工厂(er,rom)默认值(包括userdata),FIRST重新安装系统分区,然后尝试新近运行应用程序。失败。
好的,这很奇怪。也许它与应用程序处理该文件的方式有关。某种保护。 setenforce 0
。没有。如何尝试使用其中一个终端应用程序,尝试从那里捕获文件。哦,当然,它在那里很有用。
嘿,我能做到。我将生成一个进程并重写该函数:
private static String getProcMounts() {
try {
Process proc = Runtime.getRuntime().exec(new String[]{"cat", "/proc/mounts"});
BufferedReader mountsreader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
StringBuilder mountsbuilder = new StringBuilder();
String line;
while ((line = mountsreader.readLine()) != null) {
mountsbuilder.append(line).append('\n');
}
mountsreader.close();
System.out.println(mountsbuilder.toString());
return mountsbuilder.toString();
} catch (Exception e) {
Log.e("ERROR", "/proc/mounts could not be read");
return null;
}
}
当然这应该有效。
01-21 18:58:31.303 1149-1149/org.sudoforlunch.mountmanager I/System.out: /dev/block/bootdevice/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0
没有。重置仪式,所有这些东西再次为Cthulhu做出了牺牲。
如果您从发布时间和时间段中猜到,是的,我一次又一次地逐字地运行这些代码中的每一条。
请帮忙。
答案 0 :(得分:0)
@CommonsWare在评论中解决了这个问题。我不明白/ proc / mounts文件的功能。