「知乎」Android App第三方開源組件匯總
最近把用了兩年半的6s換成了華為P20 Pro,作為一名Android開發人員一直使用iOS系統感覺還是有點不接地氣。換到P20 Pro以後,頓時像打開了新世界大門,發現裡面很多功能都是iOS中所不能實現的,由衷感概系統開源所帶來的好處是真的多!
我們在開發程序時,都會使用到開源代碼,但是前段時間一篇《京東抄我的開源程序怎麼辦?》文章博取了很多人的眼球。究其根本就是京東開發過程中以源碼的方式引用了開源代碼,但沒有標註來源,引起了開源程序作者的不滿。我發現很多Android App的關於頁面,都是有開源代碼的使用列表:如支付寶、淘寶、知乎等這些大廠App的 關於頁面 都有一個 開源許可 條目,裡面包含App使用到的第三方開源包的列表。無意中翻到這個,感覺也是一個學習的機會,看看大廠開發App的套路。於是整理了「知乎」使用到的三方開源庫。
1. 網路相關
(1) OkHttp && Retrofit
OkHttp 和 Retrofit 是我經常使用的兩個網路請求庫。我只知道Retrofit底層的網路請求是使用Okhttp來做的,但是似乎單獨使用OkHttp也能實現正常需求。那麼在有了OkHttp以後,為什麼還需要使用Retrofit?
職責不同:
1. Retrofit主要負責應用層面的封裝,就是說主要面向開發者,方便使用,比如請求參數,響應數據的處理,錯誤處理等等2. OkHttp主要負責socket部分的優化,比如多路復用,buffer緩存,數據壓縮等等。封裝不同:1. Retrofit封裝了具體的請求,線程切換以及數據轉換。2. OkHttp 是基於Http協議封裝的一套請求客戶端,雖然它也可以開線程,但根本上它更偏向真正的請求,跟HttpClient, HttpUrlConnection的職責是一樣的。-- 簡書
OkHttp和Retrofit
(2) okdownload && FileDownloader
OkDownload 是FileDownloader的升級版本。是一個可靠,靈活,高性能以及強大的下載引擎。
特點:
- 簡單易用
- 單任務多線程/多鏈接/分塊下載
- 高並發
- 靈活
- 可選擇性支持:獨立/非獨立進程
- 自動斷點續傳
(3) NanoHttpd-Core
在Android端,只用一個java文件就能創建一個HttpServer。
PS:我想知道一下「知乎」的哪個功能用到了這個庫?
2. 圖片相關
(1) Fresco && Fresco Processors
Fresco是強大的Facebook的開源圖片庫,它重寫了一個ImageView。
Fresco Processors是對Fresco 顯示的圖片進行處理,如高斯模糊、馬賽克、添加遮罩等等;
對於使用Picasso或者Glide的庫也有類似相關的處理庫:
wasabeef/picasso-transformationswasabeef/glide-transformations(2) Luban
一款Android圖片壓縮工具,最接近微信朋友圈的壓縮演算法。
圖片壓縮處理是我開發移動端上算是一個空白,該庫可以彌補一下;
但是微信圖片壓縮需要在客戶端做還是在服務端做呢?想了一下,微信的圖片壓縮應該是分情況而論的,客戶端和服務端都有相應應用場景:
客戶端壓縮應用場景:
- 發送圖片到對話時:可以選擇原圖發送,若沒有選擇原圖按鈕,客戶端對圖片進行壓縮,然後發送壓縮後的圖片;
- 發送朋友圈時:默認壓縮圖片發送;
服務端壓縮應用場景:
- 當用戶發送原圖到對話時:接收方收到的圖片是壓縮後的圖片,當接收方點擊下載原圖按鈕後,原圖才被下載到;
- 編輯微信公眾號文章時,用戶上傳的圖片是原圖,但是有一個使用高清圖片的選項,如果取消選擇該選項,則在微信公眾號看到文章中的圖片時被服務端壓縮過後;
(3) subsamping Scale Image View
圖片手勢縮放 三方庫,重寫了ImageView。
但是該庫應該不能配合Fresco使用,估計只是適用於長圖的場景。
3. UI 組件
(1) BottomSheet 類似於點擊分享分享後的底部彈框
(2) Slice CardView的替代品
(3) FloatingActionButtonMD 風格的懸浮按鈕
(4) Android-ObservableScrollView可隱藏Toolbar的ScrollView
4.Rx相關 && 效率工具
(1) RxJava && RxAndroid
配合Retrofit 進行網路請求,線程隨意切換。再配合各種操作符,讓Java寫起來和JavaScript一樣。
(2) RxBinding
對View的拓展,使你可以對View事件使用RxJava的各種操作。配合各種操作符實現防止按鈕重複點擊、點擊多次監聽、驗證碼倒計時、表單驗證等等的與View相關操作;
(3) RxLifecycle
頁面(Activity、Fragment等)生命周期的管理;
(4) Otto
基於觀察者模式的事件匯流排框架,與EventBus如出一轍;
之前項目中有使用,開始用的時候覺得很爽,但是代碼超級解耦,導致後期代碼可讀性和可維護性太差,慎用!
5. 資料庫
(1) Active Android
ORM(對象關係映射)架構資料庫。面向對象的對象模型和關係型數據之間的互相轉換。基於關係型資料庫的數據存儲,實現一個虛擬的面向對象的數據訪問介面。
ORM框架使用起來較方便,但是其實現的原理是Java反射機制,反射機制的缺點就是效率不高、耗時較長。
6. JSON && HTML解析
(1) Google-http-client-jackson2
JSON與POJO的轉換,該庫與Gson和fastJSON有什麼區別呢?
jackson2框架不僅僅可以解析JSON數據。該庫包含三個包:流式的解析器和生成器、自帶註解的數據綁定包、對象映射,JSON模型;
同時該庫可解析的數據格式模塊還包括:Smile、CSV、XML、YAML;
(2) jsoup
Html代碼解析庫
7. Others
(1) rebound 讓動畫看起來更加自然
(2) SoLoader 用於載入so庫
(3) StreamSupport
(4) Android Open Source Project Android開源項目,大多為UI組件庫
感謝您的閱讀。
筆記首發於我的微信公眾號,有興趣的搜索Toryang的筆記,即可關注訂閱!
推薦閱讀: