前段時間在調研第三方推送服務的時候,反編譯了一部分市面上比較流行的APP。其中一個不管是在設計仍是功能上都堪稱典型,這款APP總用戶數超千萬(其官網數據),在國內某手機助手上支持率超97%。可見其受歡迎程度(APP的名字就不說了)。反編譯這個APP後發現其使用的第三方庫也頗有表明性。這裏介紹下他們使用的這些第三方庫,給須要的童鞋一些參考。html
這個並非一個第三方庫,是谷歌官方出的支持庫。之因此列出來除了上面說的這個APP有使用到它外,更多的是由於這個庫很強大~java
這個庫和github上的不少開源項目是有很大關係的,material design的不少效果,同一種效果在github上有太多的實現,如今官方把部分效果標準化了。
這裏注意不要和兼容庫Android Support Library 混淆,雖然都是兼容庫,但區別仍是很大的。
Android Design Support Library詳細介紹點這裏
Android Support Library 官方文檔翻譯android
這個庫應該你們都耳熟能詳了,大牛JakeWharton的做品,github上star數量超一萬,可見其受歡迎程度。git
這個開源庫可讓咱們從大量的findViewById()和setOnclicktListener()解放出來,其對性能的影響微乎其微,其自定義註解的實現都是限定爲RetentionPolicy.CLASS,也就是註解到編譯出.class文件爲止有效,在運行時不額外消耗性能。github
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.數據庫
有人以爲使用了這個庫以後代碼的可讀性差一些,這個真心不認同,相反,使用事後反倒代碼量少了好多,更清爽簡潔了。json
關於編譯時註解效率的問題能夠看下這篇文章關於java編譯時註解你須要知道的二三事。解除你的顧慮!七牛雲存儲
這個庫在Android Studio上配合android-butterknife-zelezny使用更酸爽!緩存
這兩個JSON序列化與反序列化庫應該都熟悉的了,fastjson是阿里的,gson是Google的,基本功能都差很少,至於爲何兩個庫都出如今這個APP裏面,應該是APP版本的各個開發者使用習慣不同吧,也有多是使用的一些第三方庫依賴其中一種的緣由。網絡
這裏要提一下的是fastjson號稱是Java語言中最快的JSON庫,並且有專門針對Android精簡和優化的版本,體積減小了近一半。由於體積更大,爲避免出現64K方法數限制而棄用fastjson的理由應該再也不成立。fastjson Android版本
不過也許是由於gson是Google官方出的,文檔什麼的也更詳細,gson在APP內出現的頻率仍是更高的。
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 :(
An Android custom ListView and ScrollView with pull to zoom-in.
這個直接上效果圖了
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神器
這個庫也是square開源的一個網絡請求庫(okhttp內部依賴okio)。聽說如今已被Google使用在Android源碼上了,可見其強大。
這裏有一個大神張鴻洋開源的okhttp封裝庫okhttp-utils
關於網絡請求庫,如今應該還有不少人在使用android-async-http。他內部使用的是HttpClient,可是Google貌似在6.0版本里面刪除了HttpClient相關API,可見這個庫如今有點過期了。
不過我在android-async-http的官方Wiki上發現了這個:
這個庫也應該比較熟悉了,Google官方出的一個庫,包含網絡請求和圖片加載緩存功能。在處理小而頻繁的網絡請求上有優點。
之前使用這個庫通常都是添加第三方依賴,好比android-volley 。如今已經有官方Gradle依賴了 。
compile 'com.android.volley:volley:1.0.0'
Interactive paging indicator widget, compatible with the ViewPager from the Android Support Library.
這個庫使用比較也比較普遍,實現ViewPage和頂部指示器聯動滑動的效果。
仿iOS的PickerView控件,有時間選擇和選項選擇並支持一二三級聯動效果
這個庫的做者還有另外幾個開源庫也很不錯的,有興趣的能夠點上面連接去他的github上看下。
下一代Android打包工具,1000個渠道包只須要5秒
這個庫的做者mcxiaoke在下文還會出現的。
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了,因此再也不更新了。
Simple, pretty and powerful logger for android
像做者說的同樣,簡單,漂亮,強大的一款日誌打印工具。
A material style progress wheel compatible with 2.3
七牛雲存儲,是專爲移動時代開發者打造的數據管理平臺,爲互聯網網站和移動App提供數據的在線託管、傳輸加速以及圖片、音視頻等富媒體的雲處理服務。(來自百度百科)
說到數據管理平臺,我就會忍不住想到leancloud,大學那會弄畢設有使用到它,文檔對開發者很是友好,一直印象很深入。
ShareSDK是爲iOS、Android的App提供社會化功能的一個組件,幫助開發者實現社會化分享、登陸、關注、得到用戶資料、獲取好友列表等主流的社會化功能。
這裏應該是用到了友盟的數據統計分析服務以及自動更新服務,不過要注意的是自動更新服務官方已經發聲明表示中止新註冊的APP和當前再也不使用該功能的APP接入這項服務,已經在使用的在2016年10月15日以後也要中止服務了。
Paging indicator widgets compatible with the ViewPager from the Android Support Library and ActionBarSherlock.
這個庫的做者是Jake Wharton(沒看錯,仍是這位大神),功能和上面介紹的PagerSlidingTagStrip相似,通常與viewpager組合使用。用法看這裏
小米推送服務支持全部Android平臺,在MIUI上屬於系統服務框架,共享系統級長鏈接。
共享系統級鏈接能夠這麼理解,理論上無論應用是否在後臺運行,只要有網,就能收到推送。這個應該是此APP選擇小米推送的重要緣由。在MIUI系統上,相比其它第三方推送有先天優點。
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
一個使用很普遍的圓形圖片庫
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的用法 看這裏
Android library projects that provides easy to use and extensible Barcode Scanner views based on ZXing and ZBar.
一個基於ZXing和ZBar的容易使用和擴展的條形碼掃描庫
從去年開始,RxJava+的文章就一直在國內網站各類刷屏了,最近還看到有公司招聘直接要求熟悉使用RxJava+Retrofit+OkHttp3了,可見其受歡迎程度。雖然這個庫的學習成本有點大,好在如今關於它的學習資料也很豐富。
不少RxJava的初學者應該都有看過扔物線的這篇文章 給Android 開發者的 RxJava 詳解。
還有上面提到的mcxiaoke組織翻譯的文檔ReactiveX/RxJava文檔中文版。
Implementation of ImageView for Android that supports zooming, by various touch gestures.
支持經過各類手勢來縮放圖片的一個庫,如今不少的APP內都有使用到這個庫,很受歡迎。
以上就是這個優秀的APP內使用到的絕大部分第三方庫了。但願對各位有幫助!