馬克筆記是執行在Android裝置上面的一款開源的Markdown筆記,它的功能開發得已經比較完善,已經能夠滿足大部分使用者的需求。現在將其開源到Github上面,用來交流和學習。當然,更希望你能夠參與到專案的開發當中,幫助馬克筆記變得更加有用。
1、關於馬克筆記
馬克筆記是一款開源的Markdown筆記應用,它的介面設計採用了Google最新的Material Design風格。該筆記現在的功能已經比較完善,能夠滿足使用者大多數場景的需求。開源該軟體的目的是希望與更多的人交流和學習,同時也希望能夠有人蔘與到專案的開發中,一起幫助馬克筆記,讓它變得更加有用。
你可以通過加入Google+社群來關注該軟體開發的最新動態,並且可以參與Beta測試。
馬克筆記現在已經發布到了酷安網上面,也歡迎你下載和使用該軟體。另外,筆者還開發了一款清單應用多功能清單,感興趣的同學也可以瞭解一下。
2、應用展示圖
這裡是該應用的一些截圖通過Photoshop調整之後得到的展示圖,通過展示圖,你大概可以瞭解一下該軟體的主要功能和開發狀態。在接下來的行文中,我會向你更詳細地介紹它使用到的一些技術以及現在開發完成的一些功能和特性。
3、功能和特性
我把該軟體當前已經支援的功能列了一個清單:
編號 | 功能 |
---|---|
1 | 基本的新增、修改、歸檔、放進垃圾箱、徹底刪除操作 |
2 | 基本的Markdown語法,外加MathJax等高階特性 |
3 | 特色的時間線功能,通過類似於AOP的操作記錄使用者的操作資訊 |
4 | 多種形式的媒體資料,包括檔案、視訊、音訊、圖片、手寫和位置資訊等 |
5 | 多主題,支援夜間主題,並且有多種可選的主題色和強調色 |
6 | 多彩的圖表用於統計使用者的資料資訊 |
7 | 三種形式的桌面小控制元件,並且可以為每個筆記新增快捷方式 |
8 | 允許你為筆記指定多個多彩的標籤 |
9 | 使用“樹結構”模擬資料夾操作,支援多層資料夾,並可以進行層級的搜尋 |
10 | 允許將筆記匯出為PDF、TXT、MD格式的文字、HTML和圖片 |
11 | 使用應用獨立鎖,加強資料安全 |
12 | 允許使用者備份資料到外部儲存空間和OneDrive |
13 | 圖片自動壓縮,節省本地的資料儲存空間 |
將來希望開發和完善的功能:
編號 | 功能描述 |
---|---|
1 | 資料同步,本地的檔案管理容易導致多平臺的不一致,增加同步服務,能夠實現多平臺操作 |
2 | 檔案伺服器,用於獲取圖片和檔案的連結 |
3 | 富文字編輯,即時的編輯預覽 |
4 | 允許新增鬧鐘,並且核取方塊可以編輯 |
5 | 新增地圖來展示使用者的位置資訊的變更 |
你可以從更新日誌中獲取到軟體的更新資訊。
4、依賴和用到的一些技術
馬克筆記用到了MVVM的設計模式,還用到了DataBinding等一系列技術。下面的表格中列出了用到的具體的依賴和簡要的描述。在此,還要感謝這些開源專案的作者:
編號 | 依賴 | 描述 |
---|---|---|
1 | arch.lifecycle | 使用ViewModel+LiveData實現Model和View的解耦 |
2 | Stetho | Facebook開源的安卓除錯框架 |
3 | Fabric | 錯誤跟蹤,使用者資料收集 |
4 | RxBinding | |
5 | RxJava | |
6 | RxAndroid | |
7 | OkHttp | |
8 | Retrofit | |
9 | Glide | |
10 | BRVAH | 非常好用的Recycler介面卡 |
11 | Gson | |
12 | Joda-Time | Java時間庫 |
13 | Apache IO | 檔案操作庫 |
14 | Material dialogs | |
15 | PhotoView | |
16 | Hello charts | |
17 | FloatingActionButton | |
18 | HoloColorPicker | |
19 | CircleImageView | |
20 | Changeloglib | 日誌資訊 |
21 | PinLockView | 鎖控制元件 |
22 | BottomSheet | 底部彈出的對話方塊 |
23 | Luban | 圖片壓縮 |
24 | Flexmark | 基於Java的Markdown文字解析 |
25 | PrettyTime | 時間格式美化 |
特別需要說明的一點是,馬克筆記是在開發了一段時間之後重新引入的ViewModel,因為作者本人水平有限,或者對ViewModel理解不夠深入,設計難免有不足的地方,還請批評指正。
資料庫操作
對於資料庫部分,筆者自己設計了一套資料的訪問邏輯,這裡使用到了模板和單例等設計模式。它的好處在於,當你想要向程式中新增一個資料庫實體的時候,只需要很少的配置即可,可以省去很多的樣板程式碼。而且,由於該專案的一些特殊需求,比如要記錄統計資訊等,所以就自己設計了一下。當然,可能效能上仍然有許多值得提升的地方,但筆者認為仍不失為一個簡單的學習材料。
Markdown解析
對於Markdown解析,可以使用js在webview裡面解析,也可以像本專案一樣在程式種用java進行解析。筆者認為使用Flexmark在java種解析的好處是更方便地對解析的功能進行擴充。如該軟體中的MathJax的解析就是在Flexmark的基礎上進行的擴充。
5、參與專案
正如一開始提及的那樣,馬克筆記仍然有許多不足,我希望可以有更多的人幫助馬克筆記繼續完善它的功能。當然,這並不勉強。如果你希望對該專案貢獻程式碼,你可以fork該專案,並向該專案提交請求。你可以在waffle.io上面跟蹤issue的開發狀態。或者,你發現了該軟體中存在的一些問題,你可以在issue中向開發者報告。如果有其他的需求,可以直接通過郵箱郵件開發者。
6、專案地址
因為這篇文章是從Github的Readme檔案中拷貝出來的,所以忘記加上Github地址了,抱歉。現在補上:Github