开源电子书项目FBReader初探(一)
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初探(一)相关推荐
- 开源电子书项目FBReader初探(六)
FBReader是如何读取缓存文件内容,并生成每一页Bitmap内容的呢? 经过上一篇的分析,我们已经知道,FBRreader在绘制时是获取每一页对应的bitmap,然后再进行绘制的.同时,在绘制完当 ...
- C++开源代码项目汇总
Google的C++开源代码项目 v8 - V8 JavaScript Engine V8 是 Google 的开源 JavaScript 引擎. V8 采用 C++ 编写,可在谷歌浏览器(来自 ...
- 看一下基于ASP.NET MVC的开源社区项目Orchard
昨天介绍了基于ASP.NET MVC的框架Catharsis,今天给大家介绍的是基于ASP.NET MVC的一个开源社区项目Orchard,本篇主要介绍一下Orchard是什么,如何下载安装以及安装过 ...
- 一些知名的J2me优秀开源UI项目
一些知名的J2me优秀开源UI项目 源文地址:http://www.open-open.com/73.htm J2ME Polish J2ME Polish是用于开发J2ME应用的工具集: 从 ...
- 敏捷测试--开源电子书连载
版权说明 本书为开源电子书,通过github维护.任何人都可以对该书进行投稿和修订. 本参考书旨在帮助大家更好的学习敏捷测试,在尊重和注明来源的情况下,可以自由的使用和传播. 本参考书编写过程中,参考 ...
- iPhone开源电子书阅读器:iPhoneebooks
iPhoneebooks是一个iPhone开源电子书阅读器项目,支持HTML和Txt格式. 授权协议:GNU GPL v2 截图: http://code.google.com/p/iphoneebo ...
- [电子书]项目储备二:用FreeType2绘制矢量字体、多行文字
[电子书]项目储备二:用FreeType2绘制矢量字体.多行文字 0 矢量字体 VS 点阵字体 1 FreeType2的介绍与基本使用 2 在LCD显示一个矢量字体,且可旋转 3 在LCD任意位置显示 ...
- 资料分享:推荐一本《简单粗暴TensorFlow 2.0》开源电子书!
背景 本开源电子书是一篇精简的 TensorFlow 2.0 入门指导,基于 TensorFlow 的 Eager Execution(动态图)模式,力图让具备一定机器学习及 Python 基础的开发 ...
- 厉害了,为了干掉 HTTP ,Spring团队又开源 nohttp 项目!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://t.cn/AilfwWQg Spring 团队 ...
- 推荐!最适合初学者的18个经典开源计算机视觉项目
英语原文:18 All-Time Classic Open Source Computer Vision Projects for Beginners 翻译:雷锋字幕组(小哲) 概述 开源计算机视觉项 ...
最新文章
- Kdtree(K-dimension tree)学习
- cJSON 使用笔记
- 关于Jquery中ajax方法data参数用法的总结
- 设置文本区域大小_数据验证基本设置技巧
- 工作303:接口返回的上传地址默认是可以调用的
- python基础版课件_python基础课件精编版.ppt
- Spring Boot AOP 实现日志持久化
- 小巧的Web进度条组件 - NProgress
- 【Linux】Linux JSON 格式化输出
- Beta冲刺Day4
- UG NX 12 对象的隐丽与顺复显示
- ThinkPHP6校园疫情防控管理系统
- cpp(c++)基础
- 学经济学有必要学python吗_重读《1844年经济学哲学手稿》还有必要吗?
- 某乎x-zse-96、x-zst-81最新通杀方案
- 2013年微软校园招聘笔试题
- 深入理解JavaScript学习笔记-第一章
- Python常用库的用法介绍都给大家整理出来啦,非常实用,建议收藏
- Python学习笔记 print()函数输出多个变量 使用.format()
- 新买了个redmi红米ax6s网速超快刷openwrt
热门文章
- 腾讯VS华为:2021“渠道战争”第一枪
- checksum命令 linux_Linux命令大全完整版
- rss订阅,全文阅读,渴望大家发贴的时候在RSS中总是显示全文
- 2017中国之旅系列之十一:山西绵山之旅(上)
- 会打飞机吗?原来用 Python 实现打飞机更爽
- [高通SDM450][Android9.0]CTA认证--蓝牙、WIFI申请权限
- 赴日java常问问题_赴日软件工程师java笔试题
- Python量化分析财务指标,教你用净资产收益率选股!
- 论黑产黑阔如何安全地转移赃款/洗钱?
- crypto661-rabin(网鼎杯2022-未完成)