记一次技术选型历程

310 阅读3分钟

基本功能

手机端本地离线文字记录工具,类似于备忘录,提供

  • 文字编辑,使用markdown语法
  • 历史版本管理
    • 记录和查看文件历史版本
    • 版本对比

Features

  • 离线使用。数据本地存储,只管理文件而不记录用户数据
  • 提供版本管理功能,文件可任意更改,并能快速回退历史版本

技术选型过程

使用普通web应用,不必解决跨端兼容性,也减少开发成本

可是web应用需要连网,实际上就违背了本地管理文件的理念

那用pwa?好像不行,pwa本身也是网页,只是对资源做了本地缓存。如果要基于Git开发,那就需要起一个shell进程并且至少需要能够读写本地文件,web应用目前做不到

当然短期来看如果只是需要存储文件历史版本以及提供版本比较功能,不用基于Git似乎也可以。但是带来的问题是当前以及后期功能扩展时的开发成本会更大,因为Git提供了完善的版本管理功能,后期拓展必定会用上。

那用React Native吧,只需一套代码就能开发Android和iOS应用

问题是React Native到底能不能跑Git呢。本质上如果能够跑命令行进程应该就可以,这一点没搜到相关的案例(本人对原生应用开发毫无经验。。)。不对?即使React Native能够跑命令行,但是Git不支持在移动设备上运行咋办,目前还没听说过在手机上跑Git的,赶紧搜一下

于是在Git官方文档上发现意外收获:

如果你的应用程序的目标用户是开发者,那么在其中集成源码控制功能会让他们从中受益。 甚至对于文档编辑器等并非面向程序员的应用,也可以从版本控制系统中受益,Git 的工作模式在多种场景下表现得都非常出色。

如果你想将 Git 整合进你的应用程序,那么通常有两种可行的选择:启动 shell 来调用 Git 的命令行程序,或者将 Git 库嵌入到你的应用中。

原来Git早就考虑到自己会被当做轮子使用,之前一直以为它是面向最终用户的命令行工具。

顺着这个文档找到libgit2JGit这两个库。但是libgit2官网没说自己支持Android:

image.png

JGit作为Java的一个库,和Android的语言虽然是一样的,不过得确认一下是否支持。在stackoverflow上找到这个回答stackoverflow.com/questions/3…

至此,我认为在移动端使用Git相关的库应该是可行的。只是目前还没实际验证

因为要用Git所以不得不放弃使用web的方案,而开发应用又不得不面对兼容性的问题,例如目前来看安卓和iOS大概率应该使用不同的Git库。难道真的没有在web中使用Git的方案吗

无意间看到libgit2官网有个不起眼的链接:

image.png

点开后发现有WebAssembly版本,这不就可以在网页端运行了吗

image.png

绕了一圈,最终回归到web应用的方案

后期如果想要上架应用,可以网页的基础上套一层壳

初步选型