一个开源的 Material Design 文件管理器,适用于 Android 5.0+。
- 开源:轻量、简洁并且安全。
- Material Design:遵循 Material Design 规范,并且注重细节。
- 面包屑导航栏:点击导航栏所显示路径中的任一文件夹即可快速访问。
- Root 支持:使用 root 权限查看和管理文件。
- 压缩文件支持:查看、提取和创建常见的压缩文件。
- NAS 支持:查看和管理 SFTP 和 SMB 服务器上的文件。
- 主题:可定制的界面颜色,以及可选纯黑的夜间模式。
- Linux 友好:类似 Nautilus,支持符号链接、文件权限和 SELinux 上下文。
- 健壮性:使用 Linux 系统调用实现,而不是另一个
ls
解析器。 - 实现良好:使用正确的方式打造,包括 Java NIO2 文件 API 和 LiveData。
因为喜爱 Material Design,并且是整洁、精致的 Material Design。
市面上已经有了许多强大的文件管理器,但它们中的大多数并非 Material Design。而即使在算是 Material Design 的应用之中,它们(或多或少)有着各种设计瑕疵(布局、对齐、留白、图标、字体等等)存在于应用的各个角落,让人难受;然而却又不是特别大的问题,以至于可能没人愿意特意改善。所以还是需要自己编写。
因为想要一个开源的文件管理器。
大多数流行并且可靠的文件管理器都是闭源的,并且我有时会使用它们来查看或修改需要 root 权限的文件,但我心里对于授予 root 权限给闭源应用还是有些不安。毕竟 root 权限意味着对设备的完全访问权限,而这台设备每天跟随着我并且存储着我的个人信息;这样的话,闭源应用实际上做了哪些事情就完全仅仅取决于它们的良心了。
因为想要一个正确实现的文件管理器。
-
这个应用实现了 Java NIO2 文件 API 作为后端,而不是发明一个自定义的机制来获取文件信息和进行文件操作。后者经常变得与前端逻辑耦合起来,最终成长为一个包含各种东西的混合物(示例)。相反地,一个解耦的后端可以使得代码更加干净(更少问题),并且可以更轻松地加入新文件系统的支持。
-
这个应用没有使用
java.io.File
或者解析ls
的输出,而是构建了 Linux 系统调用的绑定来正确地访问文件系统。java.io.File
是一个陈旧并且缺少许多功能的 API,并且无法正确处理符号链接,因此许多人宁愿解析ls
的输出。然而解析ls
的输出不仅缓慢,而且不可靠,同时也正是 Cabinet 在新版本 Android 上无法正确运行的原因。而通过使用 Linux 系统调用,这个应用可以做到快速流畅,并且能够处理例如 Linux 权限、符号链接以至于 SELinux 上下文等等高级特性。应用也可以正确地处理含有无效 UTF-8 编码的文件名,因为应用中的路径没有简单地使用 Java 的String
存储,而大多数其他文件管理器却并非如此,因此无法正确地进行文件操作。 -
这个应用的前端是基于现代的
ViewModel
和LiveData
实现的,使得代码结构更加清晰并且支持转屏。应用也可以正确地处理文件操作中的错误、文件冲突和前台/后台状态。
总而言之,这个应用尽力遵守 Android 上的最佳实践并且做正确的事,同时保持源代码干净和可维护。
因为事情可以被人做好。
Nautilus 是一个设计美观并且用户友好的 Linux 桌面上的文件管理器,并且同时做到了 Linux 友好。Phonograph 是一个开源的 Material Design 音乐播放其应用(我自己已经使用多年),而它也有着绝佳的 Material Design 设计和实现。
所以,是时候再编写一个 Android 文件管理器了。
Copyright (C) 2018 Hai Zhang
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.