分享一个 Flutter 混开带 Git 只读功能的阅读器 WReader

1 WReader

一个功能简单、页面简陋、却又实用的带 Git 只读功能的阅读器。提供私有 Git 仓库克隆,分支、标签检出与切换等功能,主要用于阅读 Markdown 笔记与其它文件(支持导出与其它 App 打开)。
支持 Github 、GitLab、Gitblit 或其他 Git 裸仓库等私有仓库的 Clone ,鉴权信息仅保存在本地数据库,仅在 Clone 、Pull 与 Fetch 使用到。支持 https://xxx.gitssh://xxx.gitgit@xxx.git 等格式(可使用 https://gitee.com/tea_too_tea_too/WReaderDemo.git 该仓库进行测试,该仓库是 public 仓库,无需鉴权信息)

WReader

Github 地址 :https://github.com/Bottlezn/wreader
gitee 仓库地址,我会定期更新的 : https://gitee.com/tea_too_tea_too/wreader

最新 Release 版本下载地址:

1.1 功能图示

  • 克隆、浏览
    克隆
    浏览
  • 最近阅读与设置页面
    最近阅读
    设置

1.2 功能列表

  1. 从远程 Git 仓库中 Clone 项目到本地,支持使用密钥对与账户密码检出,v0.4 版本之后支持 https:// 协议无鉴权信息检出,一次 Clone 之后无需在输入鉴权信息( 可使用 https://gitee.com/tea_too_tea_too/WReaderDemo.git 该仓库进行测试,该仓库是 public 仓库,无需鉴权信息。 )。
  2. 从 Remote 中检出 Branch 或者 tag 到本地 Branch,切换本地分支时不需要网络,因为 WReader 不会自动帮你 Pull。
  3. 自由 Pull 那些从 远程 Branch 中检出的本地 Branch ,tag 行不通哦。同时带有 Fetch 功能。
  4. 支持亮暗模式自由切换,无论是在设置页面还是阅读页面都可全局切换亮暗模式。
  5. 自动转换仓库中的本地图片,笔记中的图片不需要在带有一个外网地址啦。
  6. 使用 strapdown JS 库与 bootstrap CSS 主题提供较为美观的阅读体验。
  7. 提供最近阅读功能,在仓库文件列表与阅读记录中均带有搜索功能。
  8. 也可长按文件使用手机自带 App 打开文件,同时也支持导出文件哦。 导出后会提示导出目录
  9. 还提供 国际化环境切换 、 无效仓库清除 、 配置文件导入 等功能。
  10. 不提供本地编辑功能哦。

1.3 快速使用

建议使用 json 文件导入的方式来 Clone 项目。

  • 密钥对导入格式:authenticationWay 是的值为2,priKey , pubKeypriKeyPassword 使用 Base64 编码。其中 priKey 必须是 BEGIN RSA PRIVATE KEY 开头的,不要使用 BEGIN OPENSSH PRIVATE KEY 开头的,WReader 依赖的 JSCH 库不支持该格式。
    {
        "gitUri":"git仓库的uri,支持git与http协议",
        "targetDir":"clone仓库的目录名称,就是`git clone git@xxx targetDir`中的dir。可以不填写,使用默认值",
        "authenticationWay":2,
        "priKey":"使用Base64编码过的私钥字符串内容,必须是这个`BEGIN RSA PRIVATE KEY`开头的",
        "pubKey":"使用Base64编码过的公钥字符串内容",
        "priKeyPassword":"使用Base64编码过的私钥密码,私钥没有加密的话传空即可"
    }
    
  • 账号密码导入格式: authenticationWay 是的值为1。
    {
        "gitUri":"git仓库的uri,支持git与http协议",
        "targetDir":"clone仓库的目录名称,就是`git clone git@xxx targetDir`中的dir。可以不填写,使用默认值",
        "authenticationWay":1,
        "account": "使用Base64编码过的账号", 
        "pwd": "使用Base64编码过的密码内容"
    }
    

1.4 注意事项

  1. WReader 暂不支持 iOS 设备。因为本人主要做 Android 开发,最近学了几天 iOS 发现搞不定 Objective-Git 的导入与使用。所以源码中的 WReaderHostiOS 只是一个集成了 Flutter Module 的空架子。有兴趣的朋友可以一起参与哦,算是抛砖引玉吧。之后我打算在业余时间努力研究一下 Flutter 调用 C 库 libgit2 的方法,争取在 Android&iOS 双端或更多端中用 Native 代码来实现 Git 的功能。
  2. 本 App 是本人自发需求,自己设计功能与 UI 、并自我测试的一个 App 。如有幸有很多朋友使用,那在这过程中肯定会有很多问题出现。在 App 的设置页面有日志收集功能,大家遇到问题可以其到该页面找找看。
  3. 其他尚未发现的问题,欢迎评论指出。我的邮箱:wdu_udw@163.com
  4. 如果你喜欢 WReader ,欢迎点赞评论支持哦。

2 项目引入

  1. Clone 项目:git clone git@github.com:Bottlezn/wreader.git
  2. 目前 v0.1 版本的 tag 是 v0.1。切换到该 tag,git chekout -b fromTag/v0.1 v0.1
  3. 假设根路径是 $ROOT_DIRcd $ROOT_DIR/wreader_flutter_module ,在 terminal 中运行
    flutter pub get
    flutter create .
    
  4. Android 项目 WReaderHostAndroid 直接使用 AndroidStudio 打开即可。
  5. iOS 项目 WReaderHostiOS 需要在 WReaderHostiOS 目录下运行 pod install之后再打开,我的 XCode 版本是 11 。

2.1 大概设计思路

WReader 是我在业余时间一点点设计、开发出来的:

  1. 绝大部分页面都是使用 Flutter 开发实现,下文不说明的页面均是 Flutter 页面。
  2. 阅读笔记 与 图片浏览 页面是使用 Android 原生开发的。另外 Android 端的 Git 功能是使用 JGit 库。
  3. Markdown 文件的解析使用 WebView 加载本地 Html 并搭配 strapdown.js ,将 Markdown 文件解析为 Html格式,再使用 bootstrap 与 jQuery 等 js 库 与 css 来渲染。
  4. iOS 端建议使用 Objective-Git 或者 libgit2 库来实现的 iOS 端的 Git 功能,关于笔记方面参考 Android 端的 WebView 渲染也 OK 。

3 鸣谢

感谢公司小伙伴: 赟赟小姐姐俊俊小哥哥 给予我的在 H5 与 iOS 上的帮助。

使用到的开源库,٩(๑ᵒ̴̶̷͈᷄ᗨᵒ̴̶̷͈᷅)و棒棒哒

flutter 部分:

  • fish_redux:阿里闲鱼出品,WReader 将其用于状态管理有点少哦,IDEA 的模板生成插件该更新了哦
  • fluro:WReader中用于 Route 管理。
  • intl:标准化的库,我主要用来格式化日期。
  • json_annotation 、convert 、build_runner 与 json_serializable :JSON 序列化。
  • flutter_i18n:国际化
  • sqflite:数据库操作。

Android 部分:

  • JGit:git 的Java 实现,WReader 的核心功能依赖库。
  • glide:图片浏览库。
  • slf4j-nop:JGit 依赖的日志库。
  • PhotoView:提供图片浏览手势浏览的库。
  • gson:JSON 序列化。
  • com.amitshekhar.android:debug-db:数据库调试库。

Html 部分:

  • strapdown:md 文件的渲染 js 库,核心依赖库。
  • jquery:jquery 。
  • bootstrap:用到 bootstrap 网站的美化 css 。

iOS 部分:

  • FMDB:SQLite 读写
  • WHToast:toast

还有一些遗漏的库与热心老哥的分享文章,再次感谢!。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350