MaterialFiles
适用于 Android 的 Material Design 文件管理器
已经有一些强大的文件管理器,但其中大多数都不是材料设计的。即使在采用 Material Design 的应用程序中,它们通常也会在应用程序中存在各种较小的设计缺陷(布局、对齐、填充、图标、字体等),这让我感到不舒服,但仍然足够小,以至于不是每个人都愿意修复它。所以我必须创建自己的。
因为我想要一个开源的文件管理器。
大多数流行且可靠的文件管理器只是闭源的,我有时使用它们来查看和修改需要根访问权限的文件。但在内心深处,我对给任何闭源应用程序提供对我的设备的根访问权限感到不安。毕竟,这意味着授予对我的设备的完全访问权限,该设备每天都在我身边并存储我自己的信息,而应用程序如何使用此类访问权限仅取决于它们的良好意图。
因为我想要一个以正确方式实现的文件管理器。
该应用程序实现了Java NIO2 文件 API作为其后端,而不是为文件信息/操作发明自定义模型,该模型通常与 UI 逻辑耦合并发展为所有内容的混合体(示例)。相反,解耦的后端允许更清晰的代码(这意味着更少的错误),并且更容易添加对其他文件系统的支持。
此应用程序不使用java.io.File或解析 的输出ls,而是构建与 Linux 系统调用的绑定以正确访问文件系统。java.io.File是一个旧的 API,缺少许多功能,并且无法正确处理符号链接等内容,这就是许多人宁愿解析的原因ls。然而,解析输出ls不仅慢,而且不可靠,这使得Cabinet在较新的 Android 版本上崩溃。凭借使用 Linux 系统调用,该应用程序能够快速、流畅,并处理 Linux 权限、符号链接甚至 SELinux 上下文等高级事务。它还可以处理具有无效 UTF-8 编码的文件名,因为路径不会简单地存储为 Java String,而大多数文件管理器都会这样做,但在文件操作期间会失败。
该应用程序的前端建立在现代基础上ViewModel,LiveData可实现清晰的代码结构并支持旋转。它还可以正确处理文件操作期间的错误、文件冲突和前台/后台状态等问题。
总之,这个应用程序试图遵循 Android 上的最佳实践并做正确的事情,同时保持其源代码干净且可维护。