在非root设备上,Android用户空间文件系统驱动程序是什么?

14

我能否编写一个自定义用户空间文件系统,并通过标准可用的实用程序在非root出厂设备上运行

我知道fuse-android的存在,但据我所了解,它需要root设备。如果不是这样,请纠正我。

我尝试实现的目标是创建一个“假”文件系统,实际上它被挂载到一个文件上。

3个回答

15

我曾经有同样的需求,但最终不得不承认这几乎是不可能的。在 Android 上构建 libfuse 库应该不是问题,Java 封装也没问题。

真正的问题是,大多数系统都没有内置 fuse 支持或提供可加载的模块(需要 root 权限)。您可以通过读取 /proc/filesystems 来检查是否启用了 fuse。它应该列出 fuse,否则您将需要 root 权限。但很可能大多数 Android 设备都没有构建完整的 fuse 支持。

我的其他想法是使用另一个文件系统来“伪装”类似于 fuse 的东西。这可能与 nfs 或一些其他网络文件系统一起使用,在其中可以自己实现服务器。这将使您编写虚拟 fuse 成为可能,但我认为这并不值得。

编辑: 即使许多设备内置了 fuse 支持,它们也很可能不允许用户挂载,因为您的应用程序没有挂载 fuse 文件系统所需的特权,您需要 root 访问权限。


1
谢谢,那正是我需要的答案。悬赏金花得其所。 :) - K.Steff
我遇到了同样的问题。但无论如何,如果我克服以下问题,我认为我可以解决它。1:使Android内核能够加载内核模块(我已经完成)2:交叉编译fuse项目(我已经完成)3:将fuse.ko modprobe到Android内核中(因为我不知道在fuse 2.9.0中ko开关在哪里,我就停在这里了)。所以,有人可以帮助我吗?这是问题的详细信息:http://stackoverflow.com/questions/10477309/what-substitute-the-fuse-ko-as-the-kernel-modlue-in-fuse-2-9 - kaiwii ho
好的,可以看看像Web Drive或Wuala这样的应用程序。它们能够在Android和iOS上进行挂载而无需root权限。有人知道它们是如何做到的吗? - Kimutai
@Bryan Kim:你确定他们创建了一个虚拟文件系统吗?他们可能只是使用一个普通的文件夹并监控它的变化... - acapola
@acapola 我其实意识到它们并没有真正挂载,因为它们不会出现为额外的“SD卡”,我也无法使用我的文件管理器浏览它们。 - Kimutai

2
Luminger几乎有了正确的想法。这是我在我的Galaxy S3(在Verizon上)上发现的内容:
/proc/filesystems中确实存在适当的fuse信息。因此,某些东西肯定在使用它,很可能是系统。然而,当我尝试执行'fusermount'时,出现“无法执行--权限被拒绝”的提示。
因此,看起来所有的FUSE都在那里,但我不知道是否可以直接使用它(例如dropbox?sshfs?)而无需root设备。

我也确认在Galaxy S平板电脑中存在供应商版本。 - user2284570

1

这取决于你的实现方式。我理解的是,你想要有一个物理文件(或多个)来代表完整的用户空间文件系统。可能类似于挂载.iso文件。如果是这种情况,我想不出需要root权限的任何原因:你只需在某个位置创建/安装该文件,例如/sdcard/,然后在其上“挂载”你的文件系统即可。

话虽如此,如果你希望其他应用程序可以访问该文件系统,而这些应用程序并非由你控制,那么你将需要root权限,否则你的应用程序将在Android沙盒中运行。


好的,所以如果我想让其他应用程序也能访问它,并在通用文件系统树中显示它,这是不可能的,对吗? - K.Steff
@NuSkooler 我需要将一个文件挂载为文件系统,仅供我的应用程序使用,而不是其他人。这有可能吗?您似乎对这个部分实现有所了解,这对我来说已经足够了。请问您有任何建议或意见吗?非常感谢您的帮助。提前致谢。 - P5music
@P5music 在不了解更多您的目标细节的情况下,很难说。也许像 https://code.google.com/p/whefs/wiki/HomePage 这样的东西可以帮到您。 - NuSkooler
@P5music,你能解决这个问题吗?我有类似的需求,想要在WebView中呈现.zip文件内的html和资源。 - Super-intelligent Shade
1
@Innocent Bystander,通过简单地覆盖一些WebView或/和WebClient方法就可以轻松实现这一点。这一切都是关于将HTML作为数据加载,然后拦截资源加载。但是,您必须在RAM中保持zip文件打开,因为我认为解压缩是使用可用的Zip类进行的。 - P5music
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接