android - Android 上的通用系统挂载

标签 android linux

我编写了一个修改文件系统内容的应用程序。执行此操作的要求之一是将系统安装为可读写。从这里和其他来源,我发现被广泛接受的命令是这样的:

 mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system

我希望有人能更好地解释这是如何工作的。我理解这意味着我们正在使用 yaffs2 文件系统并将目录/dev/block/mtdblock3 挂载为/system。但是,当我在手机上发出 mount 命令时,/system 被列为 ext3,而不是 yaffs2(如果我用 ext3 代替 yaffs2,该命令同样有效)。此外,/dev/block/mtdblock3 不是现有目录。

这可能更像是一个 Linux 问题而不是 Android 问题,但我相信有人知道这一切。最重要的是,这个命令有多普遍?我计划将其发布到各种各样的设备,我需要适应其他文件系统吗?或者这会“正常工作”吗?

最佳答案

我在我的一个应用程序中使用它,以使其尽可能通用。当然,它需要有根电话才能工作。

FileInputStream inputStream;
BufferedReader r;
String line, device = "", fs = "";

try {
   inputStream = new FileInputStream("/proc/mounts");
} catch (FileNotFoundException e) {
   Log.e("Could not read mounts");     
   return;
}

r = new BufferedReader(new InputStreamReader(inputStream)); 

//find device mounted as system and file system type
try {
   while ((line = r.readLine()) != null) {
       if(line.indexOf("/system") >= 0) {
           String mount[] = line.split(" ");
           device = mount[0];
           fs = mount[2];
           break;
       }
   }
   inputStream.close();
} catch (IOException e) {
   Log.e("Could not read mounts");     
   return;
}       

//mount system as rw
CommandCapture command = new CommandCapture(0, "mount -o rw,remount -t " + fs + " " + device + " /system");
try {
    RootTools.getShell(true).add(command).waitForFinish();
} catch (Exception e) {
    Log.e("Couldn't mount system as rw!");    
    return;
}

它使用 RootTools为了方便使用 shell 命令,并假定用户已授予对您的应用程序的根访问权限。

关于android - Android 上的通用系统挂载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6542218/

相关文章:

检查变量是否存在

java - 使用数据绑定(bind)时,不会调用自定义 setter

android - 为什么在 IDE 中无法访问 UsageStats.mLaunchCount?

android - 三星用手指悬停 API

android - 数据更改上的 firebase 在附加值事件监听器中被多次调用

linux - ls: 未找到命令 BASH

android - Android RxJava订阅无处触发

php - Easyphp 工作,linux 服务器返回对非对象上的成员函数的调用

linux - windows子系统Linux在终端中找不到文件

java - LargePageHeapSizeThreshold 会激活JVM 中的UseTransparentHugePage 吗?