为什么android不想要我进行安装

时间:2017-01-21 14:23:04

标签: java android linux

所以让我首先说这让我把头发拉得太厉害了,几乎肯定会是一个愚蠢的简单回答(按照墨菲的法律),所以请提出你可能认为我做过的任何事情。

我正在使用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做出了牺牲。

如果您从发布时间和时间段中猜到,是的,我一次又一次地逐字地运行这些代码中的每一条。

请帮忙。

1 个答案:

答案 0 :(得分:0)

@CommonsWare在评论中解决了这个问题。我不明白/ proc / mounts文件的功能。