当前位置: 首页 > 工具软件 > FBReader > 使用案例 >

开源电子书项目FBReader初探(一)

杜高谊
2023-12-01

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的源码文件结构大致如下:

文件夹说明
srcJAVA源代码
asset这里有默认的那本书,还有背景图片等
docs里面有一PDF,介绍如何安装Cygwin
icons一些图标,比如menu,文字搜索的小图标
jnic/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.bookmarkFB自带书签页和编辑页及编辑工具类
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.syncTipsActivity
org.geometerplus.android.fbreader.treeTreeActivity和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.bookmodelFBReader数据,会生成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.libraryZLibrary获取FBReader版本,系统信息,DPI,调节屏幕亮度等
org.geometerplus.zlibrary.core.moneyMoney model和exception
org.geometerplus.zlibrary.core.networkCookie数据库建立,网络请求,网络管理相关的包
org.geometerplus.zlibrary.core.optionsFBReader自定义的数据类型,比如ZLBoolean3Option,ZLColorOption
org.geometerplus.zlibrary.core.resources本地资源文件
org.geometerplus.zlibrary.core.treeZLTree树结构数据基类,图书目录数据为此类子类
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.errorbug报告
org.geometerplus.zlibrary.ui.android.image图片获取和管理
org.geometerplus.zlibrary.ui.android.library错误报告,程序的主Activity,Application再次包抽象化
org.geometerplus.zlibrary.ui.android.networkCookie数据库操作
org.geometerplus.zlibrary.ui.android.util颜色处理工具类
org.geometerplus.zlibrary.ui.android.view各种翻页效果

至此,FBReader核心的代码结构及浅析已结束,当然由于接触时间有限难免有存在错误或描述不清楚的地方,还希望各位大佬能给予指正。下一篇将浅谈FBReader是如何打开一本书,以及后续一些处理逻辑的分析。

转载于:https://juejin.im/post/5bf61341e51d45324411d99e

 类似资料: