UnifyStorage

顾名思义,这个项目计划在 Android 上在不通过第三方云服务的情况下为不同类型的存储服务提供统一的操作接口。
目前正在编写的:

  • 本地文件支持 (包含 SD 卡)
  • Dropbox
  • OneDrive

将来计划支持的:

  • Google Drive
  • Box
  • WebDAV

项目地址

https://github.com/crysehillmes/UnifyStorage

起因

用到了不少的 App 都需要网盘支持,但是相当多的 App 都只支持单个网盘 (一般是 Dropbox) ,又或者是通过第三方的云服务提供多网盘支持。
通过包含多个 SDK 来支持不同网盘的缺点:

  • 由于引入的 SDK, 可能导致最终生成 Apk 尺寸大幅度增加
  • 由于不同 SDK 通常都有内部使用的类和方法,65k 的方法数会被无意义的消耗

通过第三方云服务的缺点:

  • 需借助第三方服务
  • 无法使用 SDK 提供的一些功能 (如安装有 Dropbox App 时无需密码即可授权)

本项目想要实现的目标:

  • 尽量隐藏具体存储服务实现,并同时享有原生的优势
  • 支持本地文件操作,并且应该尽量隐藏由 Android 版本带来的差异
  • 支持云存储,并且便于扩展更多的云存储
  • 不通过第三方服务,全部使用原生实现

设计

主要分为三大模块:
Authenticator: 专门负责授权
RemoteFile: 对相应存储服务文件的抽象
StorageProvider: 对存储服务的抽象

实现

刚开始实现的时候,我采用的是对于各个网盘官方 SDK 进行一层包装的做法,但是很快证明了这是一条充满荆棘的迷宫。
例如,集成 OneDrive 的时候,不仅需要集成 OneDrive Android SDK, 还需要 Live SDK 用于授权,而 Live SDK 提供的 Client 类经过无数层封装后竟然将 oauth2 token 暴露出来。
再比如下载文件部分,由于不同 SDK 实现的原因,统一接口变得十分困难。
所以最后选择了通过 REST API 操作,每个网盘都在内部使用 Retrofit2 与相关服务连接。

发表评论

电子邮件地址不会被公开。 必填项已用*标注