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雲服務
一、匯入專案並執行
專案地址
匯入
改專案是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是如何開啟一本書,以及後續一些處理邏輯的分析。