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是如何打开一本书,以及后续一些处理逻辑的分析。

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

开源电子书项目FBReader初探(一)相关推荐

  1. 开源电子书项目FBReader初探(六)

    FBReader是如何读取缓存文件内容,并生成每一页Bitmap内容的呢? 经过上一篇的分析,我们已经知道,FBRreader在绘制时是获取每一页对应的bitmap,然后再进行绘制的.同时,在绘制完当 ...

  2. C++开源代码项目汇总

    Google的C++开源代码项目 v8  -  V8 JavaScript Engine V8 是 Google 的开源 JavaScript 引擎. V8 采用 C++ 编写,可在谷歌浏览器(来自 ...

  3. 看一下基于ASP.NET MVC的开源社区项目Orchard

    昨天介绍了基于ASP.NET MVC的框架Catharsis,今天给大家介绍的是基于ASP.NET MVC的一个开源社区项目Orchard,本篇主要介绍一下Orchard是什么,如何下载安装以及安装过 ...

  4. 一些知名的J2me优秀开源UI项目

    一些知名的J2me优秀开源UI项目 源文地址:http://www.open-open.com/73.htm  J2ME Polish   J2ME Polish是用于开发J2ME应用的工具集:  从 ...

  5. 敏捷测试--开源电子书连载

    版权说明 本书为开源电子书,通过github维护.任何人都可以对该书进行投稿和修订. 本参考书旨在帮助大家更好的学习敏捷测试,在尊重和注明来源的情况下,可以自由的使用和传播. 本参考书编写过程中,参考 ...

  6. iPhone开源电子书阅读器:iPhoneebooks

    iPhoneebooks是一个iPhone开源电子书阅读器项目,支持HTML和Txt格式. 授权协议:GNU GPL v2 截图: http://code.google.com/p/iphoneebo ...

  7. [电子书]项目储备二:用FreeType2绘制矢量字体、多行文字

    [电子书]项目储备二:用FreeType2绘制矢量字体.多行文字 0 矢量字体 VS 点阵字体 1 FreeType2的介绍与基本使用 2 在LCD显示一个矢量字体,且可旋转 3 在LCD任意位置显示 ...

  8. 资料分享:推荐一本《简单粗暴TensorFlow 2.0》开源电子书!

    背景 本开源电子书是一篇精简的 TensorFlow 2.0 入门指导,基于 TensorFlow 的 Eager Execution(动态图)模式,力图让具备一定机器学习及 Python 基础的开发 ...

  9. 厉害了,为了干掉 HTTP ,Spring团队又开源 nohttp 项目!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://t.cn/AilfwWQg Spring 团队 ...

  10. 推荐!最适合初学者的18个经典开源计算机视觉项目

    英语原文:18 All-Time Classic Open Source Computer Vision Projects for Beginners 翻译:雷锋字幕组(小哲) 概述 开源计算机视觉项 ...

最新文章

  1. Kdtree(K-dimension tree)学习
  2. cJSON 使用笔记
  3. 关于Jquery中ajax方法data参数用法的总结
  4. 设置文本区域大小_数据验证基本设置技巧
  5. 工作303:接口返回的上传地址默认是可以调用的
  6. python基础版课件_python基础课件精编版.ppt
  7. Spring Boot AOP 实现日志持久化
  8. 小巧的Web进度条组件 - NProgress
  9. 【Linux】Linux JSON 格式化输出
  10. Beta冲刺Day4
  11. UG NX 12 对象的隐丽与顺复显示
  12. ThinkPHP6校园疫情防控管理系统
  13. cpp(c++)基础
  14. 学经济学有必要学python吗_重读《1844年经济学哲学手稿》还有必要吗?
  15. 某乎x-zse-96、x-zst-81最新通杀方案
  16. 2013年微软校园招聘笔试题
  17. 深入理解JavaScript学习笔记-第一章
  18. Python常用库的用法介绍都给大家整理出来啦,非常实用,建议收藏
  19. Python学习笔记 print()函数输出多个变量 使用.format()
  20. 新买了个redmi红米ax6s网速超快刷openwrt

热门文章

  1. 腾讯VS华为:2021“渠道战争”第一枪
  2. checksum命令 linux_Linux命令大全完整版
  3. rss订阅,全文阅读,渴望大家发贴的时候在RSS中总是显示全文
  4. 2017中国之旅系列之十一:山西绵山之旅(上)
  5. 会打飞机吗?原来用 Python 实现打飞机更爽
  6. [高通SDM450][Android9.0]CTA认证--蓝牙、WIFI申请权限
  7. 赴日java常问问题_赴日软件工程师java笔试题
  8. Python量化分析财务指标,教你用净资产收益率选股!
  9. 论黑产黑阔如何安全地转移赃款/洗钱?
  10. crypto661-rabin(网鼎杯2022-未完成)