開源電子書專案FBReader初探(一)

CrazyCoder發表於2018-11-22

FBReader簡介和包功能淺析

簡介

專案官網:fbreader.org/android

FBReader是一個開源電子書閱讀器,如今已經支援很多裝置。不僅有PC版,支援的作業系統有GNU/Linux,MicrosoftWindows,也支援移動終端裝置,比如NokiaInternetTablets。早在2008年4月13日,就已經有Android版本,即大家熟知的FBReaderJ。

具有以下特性:

  • 支援電子書格式:ePub、kindle (mobipocket)、fb2、rtf、html、microsoft doc、純文字、PDF(需要PDF外掛)、DJVU(需要DjVU外掛)、CBR和CBZ漫畫(需要comic外掛)
  • 可擴充性:提供綱領性的API,可以通過第三方外掛獲得一些額外的特性。例如比較受歡迎的外掛Text-to-Speech
  • 支援直接閱讀zip檔案
  • 提供直接訪問許多網路電子書圖書館和商店
  • 支援自定義OPDS目錄的新增
  • 與一些流行的字典如ColorDict, SlovoEd, Fora等整合
  • 可以使用外部TrueType/OpenType字型
  • 29種語言的本地化
  • 包含16種語言的斷字模式
  • 按標題、作者、系列等組織使用者圖書庫
  • 書收集、閱讀位置、書籤等可同步在基於Google Drive™的FBReader雲服務

一、匯入專案並執行

專案地址

github.com/geometer/FB…

匯入

改專案是eclipse編寫的,所以第一步,把這個專案變成AS專案並匯入AS 建立aidl目錄,將FBReader專案中使用的aidl檔案放於此 在此一定切記不要修改專案包名,否則將是一場災難!!!

執行

編譯專案so檔案 如果將FB作為依賴的話,還需要修改FBReaderIntents中包名常量DEFAULT_PACKAGE為自己應用的包名

二、專案原始碼結構

原始碼大體結構

FBReader的原始碼檔案結構大致如下:

資料夾 說明
src JAVA原始碼
asset 這裡有預設的那本書,還有背景圖片等
docs 裡面有一PDF,介紹如何安裝Cygwin
icons 一些圖示,比如menu,文字搜尋的小圖示
jni c/c++實現的庫檔案,內容比較多
libs 生成的so檔案在這裡
ojb .a檔案
obsolete 廢棄
res 資源
scripts 用處不明
third-party 三方引用
AndroidManiffest.xml 清單檔案

針對於原始碼各包功能淺析

包名 說明
com/paragon/dictionary/fbreader 字典查詢
org.amse.ys.zip 這個包是解壓用,epub本身就是一個壓縮檔案,所以要解壓縮
org.fbreader.util 比較排序
org.geometerplus 核心程式碼包
org.vimgadgets.linebreak 斷出一個字,例如“你好,再見!”,斷字結果為“你”“好”“再”“見”

核心程式碼包功能之org.geometerplus.android

包名 說明
org.geometerplus.android.fbreader.api 這個包是FBReader通過AIDL實現的API介面,用於安裝外掛等
org.geometerplus.android.fbreader.bookmark FB自帶書籤頁和編輯頁及編輯工具類
org.geometerplus.android.fbreader.config 各種FB相關配置,並定義了對應service和SQLite
org.geometerplus.android.fbreader.convers 圖書封面相關快取
org.geometerplus.android.fbreader.crash 圖書目錄相關的修復
org.geometerplus.android.fbreader.dict 詞典相關工具,包含開啟詞典Activity的定義
org.geometerplus.android.fbreader.error 圖書閱讀中出錯時開啟的Activity
org.geometerplus.android.fbreader.formatPlugin 根據特定外掛,生成相關Intent,可用於安裝外掛
org.geometerplus.android.fbreader.httpd 定義了dataservice和DataServer(提供獲取封面和video服務)
org.geometerplus.android.fbreader.image 只有一個ImageViewActivity,長按顯示圖片
org.geometerplus.android.fbreader.library 主要是初始化資料庫books.db,還有圖書資訊的activity
org.geometerplus.android.fbreader.libraryService 定義了libraryservice服務,進行書籍相關管理以及根據檔案路徑或特定id等獲取、查詢到真實的book
org.geometerplus.android.fbreader.network 這裡是FBReader網路連線相關的,比如下載書籍,書倉授權,OPDS相關
org.geometerplus.android.fbreader.preferences 配置資訊相關的,比如背景,文字大小,翻頁動畫速度,以及顏色等
org.geometerplus.android.fbreader.sync 書籤等的同步相關,定義了SyncService
org.geometerplus.android.fbreader.sync TipsActivity
org.geometerplus.android.fbreader.tree TreeActivity和TreeAdapter,定義樹形結構Activity、Adapter的基類
org.geometerplus.android.fbreader.util 圖片同步和簡單dialog的activity
org.geometerplus.android.util 包工具類,資料庫,還有更新UI、檔案工具等

該包中的FBReader即為程式的主Actitiy,也是閱讀的activity。其他類,諸如已Action為結尾的是各種FBReader操作對應的執行類,其核心在於run方法內部定義的操作行為。還有一些類似popup、notifier等也都是具體的一些操作對應。

核心程式碼包功能之org.geometerplus.fbreader

包名 說明
org.geometerplus.fbreader.book 書籍、書籤等相關model,資料庫,工具類
org.geometerplus.fbreader.bookmodel FBReader資料,會生成BookModel,裡面有Java的Model和本地返回的Model
org.geometerplus.fbreader.fbreader 主要是圖書顯示的FBView,還有一些選擇文字的Action,翻頁的Action
org.geometerplus.fbreader.formats 外掛入口,FBReader把epub解析,txt解析等當做一個個外掛
org.geometerplus.fbreader.library 此包中有圖書的作者類,圖書資訊類,檔案類,以及路徑生成的樹結構
org.geometerplus.fbreader.network 網路相關
org.geometerplus.fbreader.sort 排序
org.geometerplus.fbreader.tips 網路相關行為提示
org.geometerplus.fbreader.tree 自定義的書結構,FBTree
org.geometerplus.fbreader.util 根據傳入的起始位置,獲取文字片段

該包中另包含一個Paths類,其內容是整個FBReader專案的路徑相關。

核心程式碼包功能之org.geometerplus.zlibrary.core

包名 說明
org.geometerplus.zlibrary.core.application 並不是Android裡的Application,而是作者自定義的管理應用
org.geometerplus.zlibrary.core.constants 各種名稱空間,其實就是各種url連結
org.geometerplus.zlibrary.core.drm 加密相關
org.geometerplus.zlibrary.core.encodings 用於讀取encoding/Encodings.xml內的編碼
org.geometerplus.zlibrary.core.filesystem 裡有各種File類,比如壓縮File,資源File,本地File等
org.geometerplus.zlibrary.core.filetypes 檔案型別
org.geometerplus.zlibrary.core.fonts 字型資訊
org.geometerplus.zlibrary.core.image 圖片載入,圖片處理相關的包
org.geometerplus.zlibrary.core.language 編碼檢測包
org.geometerplus.zlibrary.core.library ZLibrary獲取FBReader版本,系統資訊,DPI,調節螢幕亮度等
org.geometerplus.zlibrary.core.money Money model和exception
org.geometerplus.zlibrary.core.network Cookie資料庫建立,網路請求,網路管理相關的包
org.geometerplus.zlibrary.core.options FBReader自定義的資料型別,比如ZLBoolean3Option,ZLColorOption
org.geometerplus.zlibrary.core.resources 本地資原始檔
org.geometerplus.zlibrary.core.tree ZLTree樹結構資料基類,圖書目錄資料為此類子類
org.geometerplus.zlibrary.core.util 各種工具類
org.geometerplus.zlibrary.core.view 自定義的view類,是閱讀介面顯示的最高抽象類,以及事件監聽,處理
org.geometerplus.zlibrary.core.xml 解析xml

核心程式碼包功能之org.geometerplus.zlibrary.text

包名 說明
org.geometerplus.zlibrary.text.hyphenation 根據斷字來判斷是哪種語言
org.geometerplus.zlibrary.text.model 一個抽象類包,有對文字的處理,以及對段落的處理,儲存文字到快取
org.geometerplus.zlibrary.text.view 文字被結構化,文字塊,一行文字,文欄位,一頁,都在此包下處理,以及顯示的view

核心程式碼包功能之org.geometerplus.zlibrary.ui.android

包名 說明
org.geometerplus.zlibrary.ui.android.error bug報告
org.geometerplus.zlibrary.ui.android.image 圖片獲取和管理
org.geometerplus.zlibrary.ui.android.library 錯誤報告,程式的主Activity,Application再次包抽象化
org.geometerplus.zlibrary.ui.android.network Cookie資料庫操作
org.geometerplus.zlibrary.ui.android.util 顏色處理工具類
org.geometerplus.zlibrary.ui.android.view 各種翻頁效果

至此,FBReader核心的程式碼結構及淺析已結束,當然由於接觸時間有限難免有存在錯誤或描述不清楚的地方,還希望各位大佬能給予指正。下一篇將淺談FBReader是如何開啟一本書,以及後續一些處理邏輯的分析。

相關文章