昨天是臘月23,俗稱「小年」。民間有這樣的說法,二十三糖瓜兒粘;二十四掃房子;二十五磨豆腐;二十六燉大肉;二十七宰公雞;二十八把面發;二十九蒸饅頭;三十晚上熬一宿,大年初一扭一扭!
農曆十二月二十三和二十四,是中國民間傳統的祭竈日,又稱「小年」。傳說竈王爺原爲平民張生,娶妻以後終日花天酒地,敗盡家業淪落到上街行乞。一天,他乞討到了前妻郭丁香家,羞愧難當,一頭鑽到竈鍋底下燒死了。
玉帝知道後,認爲張生能回心轉意,還沒壞到底,既然死在了鍋底,就把他封爲竈王,每一年臘月二十3、二十四上天彙報,大年三十再回到竈底。老百姓以爲竈王必定要敬重,由於他要上天彙報。因而,民間就有了臘月二十3、二十四的祭竈「小年」,祈求來年平安和財運。
清朝的皇帝從雍正年間開始,每一年臘月二十三在坤寧宮祀神,爲了節省開支,皇帝順便把竈王爺也拜了。之後王族、貝勒隨之效仿,於臘月二十三祭竈,自此開始有了官民在不一樣日子太小年的分別。
在中國民間,小年有「官三民四船五」的傳統,也就是說,官家的小年是臘月二十三,百姓家的是臘月二十四,而水上人家則是臘月二十五。
北方在南宋之前都是政治中心,受官氣影響較重,所以小年多爲臘月二十三;相反,南方遠離政治中心,小年便爲臘月二十四;而沿湖、海的居民,則保留了船家的傳統,小年定在臘月二十五。
而南京地區是一個比較特殊的地區,這是由於在明代朱棣篡奪皇位後,實行了暴政。當時的百姓在永樂元年正月十五舉行燈會,內心紛紛懷念朱允炆時代的寬政,場面勝過過年。所以在南京地區,元宵成了小年。西南雲貴川地區和部分北方回民地區把正月初一做爲大年夜,除夕就成了小年夜。
以上來源於百度百科。css
(本文寫於2017.2.9號,首次在公衆號發表)立刻要臨近春節了,咱們公司今天(2.9號)正式放假,本篇也是年前的最後一次推文。在這裏提早祝你們新春快樂,狗年大吉,十"犬"十美,狗年Go Go Go! 由於最近在作閱讀引擎相關的工做,因此總結的文檔大都和閱讀引擎有關。若是對此不敢興趣的同窗能夠忽略掉。本文講一下我以前分析FBReader時,對FBReader工程結構解析作的一個筆記總結。下面將分層次說明一下各個模塊。html
Android Color Picker application using AmbilWarna Color Picker Library
背景顏色選擇器,用在設置背景顏色時,以及標籤背景編輯時使用。
能夠提取爲一個模塊。放到最後再提取,先整理主工程。java
移植遇到的坑比較多:
使用AmbilWarnaKotak和AmbilWarnaPrefWidgetView 的xml中的包名須要修改;
原來的爲
yuku.ambilwarna.AmbilWarnaKotak
yuku.ambilwarna.widget.AmbilWarnaPrefWidgetView
修改後爲,
com.thridapp.widget.AmbilWarnaKotak
com.thridapp.widget.AmbilWarnaPrefWidgetViewandroid
文件選擇器,用來進行文件選擇。
org.geometerplus.android.util.FileChooserUtil 須要關注,其它好像用途不大,項目中其它文件基本沒有在使用。
包名爲:group.pals.android.lib.ui.filechooser
能夠暫時保留。git
拖動排序列表。
只有CatalogManagerActivity(目錄管理界面)中使用了DragSortListView ,能夠暫時忽略這個界面,RN端來實現。
因此此模塊能夠不用集成。github
包名爲:com.mobeta.android.dslv
此模塊能夠刪除。對應「在線書庫」 中的「管理書庫」菜單中的列表排序。CatalogManagerActivity 爲對應的activity,能夠將其刪除。數據庫
特殊的toast控件,在工程中使用的地方較多。
能夠提取爲一個模塊,注意其中無用的文件能夠刪除掉。
包名爲:com.github.johnpersano.supertoasts
此工程能夠暫時保留。編程
HttpClient 是 Apache Jakarta Common 下的子項目,能夠用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,而且它支持 HTTP 協議最新的版本和建議。json
JSON.simple是一個很簡單的JSON處理,讀取和寫JSON數據的JAVA庫,它徹底兼容JSON的標準(RFC4627)。你能夠用JSON.simple來編碼或解碼JSON文本。api
語言集成包。應用是提供多語言服務的。
NanoHTTPD是專爲嵌入在其餘Java應用程序中使用的一個輕量級HTTP服務器,它只有一個Java文件。支持 GET, POST, PUT, HEAD 和 DELETE 請求,支持文件上傳,佔用內存很小。可輕鬆定製臨時文件使用和線程模型。
The Open Dictionary API Alliance (ODAA) is an open community of dictionary publishers aiming to create new possibilities for millions of people using electronic dictionaries on their mobile devices all over the world.
打開詞典API聯盟(ODAA)是字典出版商旨在全世界範圍內,創造一個爲全世界數百萬人在他們的移動設備上使用電子詞典的新可能性。
PdfParser, a standalone PHP library, provides various tools to extract data from a PDF file.
PdfParser,一個獨立的PHP庫,提供了各類工具,從PDF文件中提取數據。
注意,
原始編譯選項爲,APP_ABI := armeabi armeabi-v7a x86 mips arm64-v8a mips64 x86_64
若是有的手機沒法正常運行,能夠考慮是否少so文件。
Liblinebreak is an implementation of the line breaking algorithm as described in Unicode 6.0.0 Standard Annex 14, Revision 26. It breaks lines that contain Unicode characters. It is designed to be used in a generic text renderer. FBReader is one real-world example, and you may also check some simple sample code, like showbreak and breaktext.
應該是用來換行排版使用的
此庫比較有用,在LineBreaker.java中進行調用,對應native層的LineBreaker.cpp,ZLTextParagraphCursor.java中會調用到。
Expat是一個用C語言開發的、用來解析XML文檔的開發庫,它最初是開源的、Mozilla項目下的一個XML解析器。
expat是使用C所寫的XML解釋器,採用流的方式來解析XML文件,而且基於事件通知型來調用分析到的數據,並不須要把全部XML文件所有加載到內存裏,這樣能夠分析很是大的XML文件。因爲expat庫是由XML的主要負責人James Clark來實現的,所以它是符合W3C的XML標準的。
應該是進行壓縮的。
DeflatingDecompressor.java中進行調用,對應native層的DeflatingDecompressor.cpp文件。
用來對不一樣格式進行兼容處理的,應該包括,
css,doc,fb2,html,xhtml, oeb,pdb ,rtf ,txt等格式。
提供不一樣格式的文件以插件方式來支持。
在PluginCollection.java中調用,對應native的JavaPluginCollection.cpp文件。
PluginCollection 應該是插件管理器。
包路徑:org.amse.ys.zip
功能須要保留,可是包名要替換。注意涉及到底層DeflatingDecompressor 庫。
包路徑:org.fbreader.util
功能須要保留,可是包名要替換。
所有爲jni代碼,包括兩部分,expat-2.0.1 和NativeFormats,應該是對文字字符進行格式化。
最終會編譯成.so或者.a庫,能夠不用修改,可是對外提供的natvie接口名稱須要修改。
包路徑:assets.resources.application和assets.resources.zlibrary
多國語言字符串資源,放在assets目錄下,能夠只保留英文和簡體中文。
涉及到的包路徑:
com.paragon.dictionary.fbreader
org.fbreader
org.geometerplus
能夠和主工程合到一塊兒,包括assets目錄下的文件。
涉及到的包路徑:
api.src.main.java.org.geometerplus.android
api.src.main.java.org.geometerplus.fbreader
api.src.main.java.org.geometerplus.zlibrary
能夠和主工程合到一塊兒。
涉及到的包路徑:
java.org.geometerplus.android
java.org.geometerplus.fbreader
java.org.geometerplus.zlibrary
data.premium ,licences.html提供licences和購買信息。
data.whatsnew介紹新特性。
默認的按鍵,插件配置信息
tapzones,keymap.xml提供按鍵映射的xml文件
styles.css,styles.xml提供默認值配置文件
plugins.xml提供插件對應的包名信息
詞典相關的配置信息
bitknights.xml 提供bitknights 官方網站提供多種詞典下載的地址
main.xml提供多種詞典打開的方式
編碼方式設置信息
Encodings.xml列出支持的編碼方式
包括,
formats.fb2
formats.html
formats.xhtml 三個目錄。
爲NativeFormats 的jni工程提供配置信息。
提供斷字模式,模塊ZLTextTeXHyphenator.java會調用到。
語言不一樣編碼模式,languagePatterns.java和ZLLanguageList.cpp會用到。
多國語言字符串資源。
預置了幾種牆紙文件,爲jpg格式文件。
若是隻須要閱讀引擎的話,全部的activity都應該清理掉,下面只分析一下Service和Receiver。
<!-- service --> <!--ApiClientImplementation 類隱式啓動, 沒有找到啓動ApiClientImplementation地方,因此此類應該是未用--> <service android:name="com.laoxiao79.test.android.reader.api.ApiService" android:launchMode="singleTask"> <intent-filter> <action android:name="android.fbreader.action.API"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </service> <!--BookCollectionShadow 中隱式啓動,用來建立,訪問數據庫,存儲book信息到本地--> <service android:name="com.laoxiao79.test.android.reader.libraryService.LibraryService" android:launchMode="singleTask" android:process=":libraryService"> <intent-filter> <action android:name="android.fbreader.action.LIBRARY_SERVICE"/> </intent-filter> </service> <!--ConfigShadow 類隱式啓動,只有在ZLAndroidApplication中的一個實例--> <service android:name="com.laoxiao79.test.android.reader.config.ConfigService" android:launchMode="singleTask" android:process=":configService"> <intent-filter> <action android:name="android.fbreader.action.CONFIG_SERVICE"/> </intent-filter> </service> <!--和官網同步服務相關--> <service android:name="com.laoxiao79.test.android.reader.sync.SyncService" android:launchMode="singleTask" android:process=":synchroniser"> <intent-filter> <action android:name="android.fbreader.action.sync.START"/> </intent-filter> <intent-filter> <action android:name="android.fbreader.action.sync.QUICK_SYNC"/> </intent-filter> </service> <!--BookDownloader下載相關的activity--> <service android:name="com.laoxiao79.test.android.reader.network.BookDownloaderService" android:launchMode="singleTask" android:process=":networkLibrary" android:exported="false"/> <!--後臺網絡訪問--> <service android:name="com.laoxiao79.test.android.reader.httpd.DataService" android:launchMode="singleTask" android:process=":dataService" android:exported="false"/> <!--FileChooserActivity 中用到,和選擇文件有關--> <service android:name="group.pals.android.lib.ui.filechooser.services.LocalFileProvider" android:exported="false"/>
綜上,以上就是整個FBReader工程的一個結構解析,再深刻分析就須要研究每一個activity,service或者具體類了,但願以上總結能給你帶來幫助。
本公衆號將以推送Android各類技術乾貨或碎片化知識,以及整理老司機平常工做中踩過的坑涉及到的經驗知識爲主,也會不按期將正在學習使用的新技術總結出來進行分享。天天一點乾貨小知識把你的碎片時間充分利用起來。