一個千萬量級的APP使用的一些第三方庫

原文地址:http://www.jianshu.com/p/dc8c05cf693d

.背景

前段時間在調研第三方推送服務的時候,反編譯了一部分市面上比較流行的APP。其中一個無論是在設計還是功能上都堪稱典型,這款APP總用戶數超千萬(其官網數據),在國內某手機助手上支持率超97%。可見其受歡迎程度(APP的名字就不說了)。反編譯這個APP後發現其使用的第三方庫也很有代表性。這裏介紹下他們使用的這些第三方庫,給需要的童鞋一些參考。

1.Android Design Support Library

這個並不是一個第三方庫,是谷歌官方出的支持庫。之所以列出來除了上面說的這個APP有使用到它外,更多的是因爲這個庫很強大~

這個庫和github上的很多開源項目是有很大關係的,material design的很多效果,同一種效果在github上有太多的實現,現在官方把部分效果標準化了。
這裏注意不要和兼容庫Android Support Library 混淆,雖然都是兼容庫,但區別還是很大的。
Android Design Support Library詳細介紹點這裏
Android Support Library 官方文檔翻譯

2. butterknife

這個庫應該大家都耳熟能詳了,大牛JakeWharton的作品,github上star數量超一萬,可見其受歡迎程度。

這個開源庫可以讓我們從大量的findViewById()和setOnclicktListener()解放出來,其對性能的影響微乎其微,其自定義註解的實現都是限定爲RetentionPolicy.CLASS,也就是註解到編譯出.class文件爲止有效,在運行時不額外消耗性能。

Instead of slow reflection, code is generated to perform the view look-ups. Calling bind delegates to this generated code that you can see and debug.

有人覺得使用了這個庫之後代碼的可讀性差一些,這個真心不認同,相反,使用過後反倒代碼量少了好多,更清爽簡潔了。

關於編譯時註解效率的問題可以看下這篇文章關於java編譯時註解你需要知道的二三事。解除你的顧慮!

這個庫在Android Studio上配合android-butterknife-zelezny使用更酸爽!

3.fastjsongson

這兩個JSON序列化與反序列化庫應該都熟悉的了,fastjson是阿里的,gson是Google的,基本功能都差不多,至於爲什麼兩個庫都出現在這個APP裏面,應該是APP版本的各個開發者使用習慣不一樣吧,也有可能是使用的一些第三方庫依賴其中一種的原因。

這裏要提一下的是fastjson號稱是Java語言中最快的JSON庫,而且有專門針對Android精簡和優化的版本,體積減少了近一半。因爲體積更大,爲避免出現64K方法數限制而棄用fastjson的理由應該不再成立。fastjson Android版本

不過也許是因爲gson是Google官方出的,文檔什麼的也更詳細,gson在APP內出現的頻率還是更高的。

4.picasso

A powerful image downloading and caching library for Android

這個是square 開源的一個強大的圖片下載和緩存庫。很受歡迎,許多項目都有在使用這個庫。使用方式也很簡單。

關於圖片加載庫現在比較流行的還有Glide和Fresco。

Glide
Google員工私人項目,Google很多項目在用。picasso能做到的它都能做到,並且還支持gif。我在公司的項目中也使用的是這個庫。不過注意在使用這個庫給ImageView加載圖片的時候,ImageView設置 Tag的Id必須顯示指定。

關於Glide和Picasso這篇譯文有一個比較詳細的對比介紹 Glide VS Picasso(打算使用Glide的話注意看下這篇文章下面的評論)

Fresco
這個是FaceBook的開源項目,上面鏈接中有中文的詳細文檔。這個庫除了支持的圖片格式很廣泛外,最大的特性就是在內存優化這塊,使用這個庫能有效防止OOM情況的出現。

在5.0以下系統,Bitmap緩存位於ashmem,這樣Bitmap對象的創建和釋放將不會引發GC,更少的GC會使你的APP運行得更加流暢。
5.0及其以上系統,相比之下,內存管理有了很大改進,所以Bitmap緩存直接位於Java的heap上。
當應用在後臺運行時,該內存會被清空。

不過這個庫非主流強大的功能使得這個庫體積有2M之大,使用起來也有點不太方便。

最後,如果你還在用Android-Universal-Image-Loader這個老牌庫,建議儘早替換掉它,這個庫已經停止更新了。而且無論是使用體驗還是性能都沒有以上庫好。

Really have no time for development... so I stop project maintaining since Nov 27 :(

5.PullZoomView

An Android custom ListView and ScrollView with pull to zoom-in.

這個直接上效果圖了


PullZoomView效果圖.gif

6.SwipeBackLayout

An Android library that help you to build app with swipe back gesture.

一個能幫我們輕鬆實現右滑退出當前頁面功能的庫,這個庫也有使用在我們公司的項目中,不過花了不少時間在處理兼容性問題上(有時間的話會把填過的坑分享出來)。

這裏有必要再提一下這個庫在手勢處理方面使用到的ViewDragHelper,非常有用的一個工具類。

ViewDragHelper is a utility class for writing custom ViewGroups. It offers a number
of useful operations and state tracking for allowing a user to drag and reposition
views within their parent ViewGroup.

具體可以看下這篇文章Android ViewDragHelper完全解析 自定義ViewGroup神器


swipeBackLayout.png

7.okhttp okio

這個庫也是square開源的一個網絡請求庫(okhttp內部依賴okio)。據說現在已被Google使用在Android源碼上了,可見其強大。

這裏有一個大神張鴻洋開源的okhttp封裝庫okhttp-utils

關於網絡請求庫,現在應該還有很多人在使用android-async-http。他內部使用的是HttpClient,但是Google貌似在6.0版本里面刪除了HttpClient相關API,可見這個庫現在有點過時了。

不過我在android-async-http的官方Wiki上發現了這個:


android-async-http_Wiki.png

8.volley

這個庫也應該比較熟悉了,Google官方出的一個庫,包含網絡請求和圖片加載緩存功能。在處理小而頻繁的網絡請求上有優勢。

以前使用這個庫一般都是添加第三方依賴,比如android-volley 。現在已經有官方Gradle依賴了 。

compile 'com.android.volley:volley:1.0.0'

9.PagerSlidingTagStrip

Interactive paging indicator widget, compatible with the ViewPager from the Android Support Library.

這個庫使用比較也比較廣泛,實現ViewPage和頂部指示器聯動滑動的效果。


pagerSlidingTabStrip.png

10.Android-PickerView

仿iOS的PickerView控件,有時間選擇和選項選擇並支持一二三級聯動效果

這個庫的作者還有另外幾個開源庫也很不錯的,有興趣的可以點上面鏈接去他的github上看下。


pickerdemo.gif

11.packer-ng-plugin

下一代Android打包工具,1000個渠道包只需要5秒

這個庫的作者mcxiaoke在下文還會出現的。

12.NineOldAndroids

Android library for using the Honeycomb animation API on all versions of the platform back to 1.0!

NineOldAndroids is deprecated. No new development will be taking place. Existing versions will (of course) continue to function. New applications should use minSdkVersion="14" or higher which has access to the platform animation APIs.
Thanks for all your support!

View的屬性動畫在Android API 11及其以後才支持,該庫的作用就是讓API 11以下的系統也能夠正常的使用屬性動畫。不過該庫作者Jake Wharton(是的,又是這位大神)認爲現在APP支持的最低版本應該是4.0了,所以不再更新了。

13.Logger

Simple, pretty and powerful logger for android

像作者說的一樣,簡單,漂亮,強大的一款日誌打印工具。


custom-tag.png

14.materialish-progress

A material style progress wheel compatible with 2.3


spinningwheel.gif

15.七牛

七牛雲存儲,是專爲移動時代開發者打造的數據管理平臺,爲互聯網網站和移動App提供數據的在線託管、傳輸加速以及圖片、音視頻等富媒體的雲處理服務。(來自百度百科)

說到數據管理平臺,我就會忍不住想到leancloud,大學那會弄畢設有使用到它,文檔對開發者非常友好,一直印象很深刻。

16.shareSDK

ShareSDK是爲iOS、Android的App提供社會化功能的一個組件,幫助開發者實現社會化分享、登錄、關注、獲得用戶資料、獲取好友列表等主流的社會化功能。

17.友盟+

這裏應該是用到了友盟的數據統計分析服務以及自動更新服務,不過要注意的是自動更新服務官方已經發聲明表示停止新註冊的APP和當前不再使用該功能的APP接入這項服務,已經在使用的在2016年10月15日之後也要停止服務了。

18.ViewPagerIndicator

Paging indicator widgets compatible with the ViewPager from the Android Support Library and ActionBarSherlock.

這個庫的作者是Jake Wharton(沒看錯,還是這位大神),功能和上面介紹的PagerSlidingTagStrip類似,一般與viewpager組合使用。用法看這裏


viewPagerIndicator.png

19.小米推送

小米推送服務支持所有Android平臺,在MIUI上屬於系統服務框架,共享系統級長連接。

共享系統級連接可以這麼理解,理論上不管應用是否在後臺運行,只要有網,就能收到推送。這個應該是此APP選擇小米推送的重要原因。在MIUI系統上,相比其它第三方推送有先天優勢。

20.greenDAO

greenDAO is a light & fast ORM solution for Android that maps objects to SQLite databases. Being highly optimized for Android, greenDAO offers great performance and consumes minimal memory.

在所有將對象映射到 SQLite 數據庫中的 ORM 庫中,greenDAO 在性能方面佔很大優勢。而且文檔也很詳細。

不過最近有一個比較火的跨平臺移動數據庫引擎realm,支持iOS、OS X(Objective-C和Swift)以及Android。性能比原生的SQLite還要好。目標是要取代SQLite。可以多關注下。

Realm is a mobile database: a replacement for Core Data & SQLite

21.CircleImageView

一個使用很廣泛的圓形圖片庫


CircleImageView.png

22.Crouton

I won't do any active development for Crouton any more. But I still do accept pull requests that fix bugs.
So long, and thanks for all the forks.

這個庫功能類似於SnackBar,因爲官方已經出了SnackBar,所以作者停止了繼續更新這個庫。

關於SnackBar的用法 看這裏

23.BarcodeScanner

Android library projects that provides easy to use and extensible Barcode Scanner views based on ZXing and ZBar.
一個基於ZXing和ZBar的容易使用和擴展的條形碼掃描庫


scanner.png

24.Rxjava

從去年開始,RxJava+的文章就一直在國內網站各種刷屏了,最近還看到有公司招聘直接要求熟悉使用RxJava+Retrofit+OkHttp3了,可見其受歡迎程度。雖然這個庫的學習成本有點大,好在現在關於它的學習資料也很豐富。

很多RxJava的初學者應該都有看過扔物線的這篇文章 給Android 開發者的 RxJava 詳解
還有上面提到的mcxiaoke組織翻譯的文檔ReactiveX/RxJava文檔中文版

25.PhotoView

Implementation of ImageView for Android that supports zooming, by various touch gestures.

支持通過各種手勢來縮放圖片的一個庫,現在很多的APP內都有使用到這個庫,很受歡迎。

最後

以上就是這個優秀的APP內使用到的絕大部分第三方庫了。希望對各位有幫助!
要是喜歡的話,就點個贊鼓勵下哈~
最後也感謝一下這個APP的開發者們!



文/Ziv_xiao(簡書作者)
原文鏈接:http://www.jianshu.com/p/dc8c05cf693d
著作權歸作者所有,轉載請聯繫作者獲得授權,並標註“簡書作者”。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章