最近把用了兩年半的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?

www.jianshu.com圖標

(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-transformations?

github.com
圖標
wasabeef/glide-transformations?

github.com
圖標

(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的筆記,即可關注訂閱!

推薦閱讀:

相关文章