前言:
在開發(fā)一個(gè)應(yīng)用開始我們最先考慮的就是選擇哪些第三方的框架,這里列出BAT這種千萬用戶量級別的應(yīng)用,使用到的第三方框架。有人會(huì)好奇我是怎么知道的,其實(shí)你反編譯后就知道了!
1.AndroidDesign Support Library
這個(gè)并不是一個(gè)第三方庫,是谷歌官方出的支持庫。之所以列出來除了上面說的這個(gè)APP有使用到它外,更多的是因?yàn)檫@個(gè)庫很強(qiáng)大~
這個(gè)庫和github上的很多開源項(xiàng)目是有很大關(guān)系的,material design的很多效果,同一種效果在github上有太多的實(shí)現(xiàn),現(xiàn)在官方把部分效果標(biāo)準(zhǔn)化了。
這里注意不要和兼容庫Android Support Library 混淆,雖然都是兼容庫,但區(qū)別還是很大的。
Android Design Support Library詳細(xì)介紹點(diǎn)這里
Android Support Library 官方文檔翻譯點(diǎn)擊打開鏈接
2. butterknife
這個(gè)庫應(yīng)該大家都耳熟能詳了,大牛JakeWharton的作品,github上star數(shù)量超一萬,可見其受歡迎程度。
這個(gè)開源庫可以讓我們從大量的findViewById()和setOnclicktListener()解放出來,其對性能的影響微乎其微,其自定義注解的實(shí)現(xiàn)都是限定為RetentionPolicy.CLASS,也就是注解到編譯出.class文件為止有效,在運(yùn)行時(shí)不額外消耗性能。
有人覺得使用了這個(gè)庫之后代碼的可讀性差一些,這個(gè)真心不認(rèn)同,相反,使用過后反倒代碼量少了好多,更清爽簡潔了。
關(guān)于編譯時(shí)注解效率的問題可以看下這篇文章關(guān)于 java編譯時(shí)注解你需要知道的二三事。解除你的顧慮!
這個(gè)庫在Android Studio上配合android-butterknife-zelezny使用更酸爽!
3.fastjson,gson
這兩個(gè)JSON序列化與反序列化庫應(yīng)該都熟悉的了,fastjson是阿里的,gson是Google的,基本功能都差不多,至于為什么兩個(gè)庫都出現(xiàn)在這個(gè)APP里面,應(yīng)該是APP版本的各個(gè)開發(fā)者使用習(xí)慣不一樣吧,也有可能是使用的一些第三方庫依賴其中一種的原因。
這里要提一下的是fastjson號稱是Java語言中最快的JSON庫,而且有專門針對Android精簡和優(yōu)化的版本,體積減少了近一半。因?yàn)轶w積更大,為避免出現(xiàn)64K方法數(shù)限制而棄用fastjson的理由應(yīng)該不再成立。fastjson Android版本
不過也許是因?yàn)間son是Google官方出的,文檔什么的也更詳細(xì),gson在APP內(nèi)出現(xiàn)的頻率還是更高的。
4.picasso
這個(gè)是square 開源的一個(gè)強(qiáng)大的圖片下載和緩存庫。很受歡迎,許多項(xiàng)目都有在使用這個(gè)庫。使用方式也很簡單。
關(guān)于圖片加載庫現(xiàn)在比較流行的還有Glide和Fresco。
Glide
Google員工私人項(xiàng)目,Google很多項(xiàng)目在用。picasso能做到的它都能做到,并且還支持gif。我在公司的項(xiàng)目中也使用的是這個(gè)庫。不過注意在使用這個(gè)庫給ImageView加載圖片的時(shí)候,ImageView設(shè)置 Tag的Id必須顯示指定。
關(guān)于Glide和Picasso這篇譯文有一個(gè)比較詳細(xì)的對比介紹Glide VS Picasso(打算使用Glide的話注意看下這篇文章下面的評論)
Fresco
這個(gè)是FaceBook的開源項(xiàng)目,上面鏈接中有中文的詳細(xì)文檔。這個(gè)庫除了支持的圖片格式很廣泛外,最大的特性就是在內(nèi)存優(yōu)化這塊,使用這個(gè)庫能有效防止OOM情況的出現(xiàn)。
在5.0以下系統(tǒng),Bitmap緩存位于ashmem,這樣Bitmap對象的創(chuàng)建和釋放將不會(huì)引發(fā)GC,更少的GC會(huì)使你的APP運(yùn)行得更加流暢。
5.0及其以上系統(tǒng),相比之下,內(nèi)存管理有了很大改進(jìn),所以Bitmap緩存直接位于Java的heap上。
當(dāng)應(yīng)用在后臺運(yùn)行時(shí),該內(nèi)存會(huì)被清空。
不過這個(gè)庫非主流強(qiáng)大的功能使得這個(gè)庫體積有2M之大,使用起來也有點(diǎn)不太方便。
最后,如果你還在用Android-Universal-Image-Loader(https://github.com/nostra13/Android-Universal-Image-Loader)這個(gè)老牌庫,建議盡早替換掉它,這個(gè)庫已經(jīng)停止更新了。而且無論是使用體驗(yàn)還是性能都沒有以上庫好。
5.PullZoomView
6.SwipeBackLayout
一個(gè)能幫我們輕松實(shí)現(xiàn)右滑退出當(dāng)前頁面功能的庫,這個(gè)庫也有使用在我們公司的項(xiàng)目中,不過花了不少時(shí)間在處理兼容性問題上(有時(shí)間的話會(huì)把填過的坑分享出來)。
這里有必要再提一下這個(gè)庫在手勢處理方面使用到的ViewDragHelper,非常有用的一個(gè)工具類。
具體可以看下這篇文章Android ViewDragHelper完全解析 自定義ViewGroup神器
7.okhttp okio
這個(gè)庫也是square開源的一個(gè)網(wǎng)絡(luò)請求庫(okhttp內(nèi)部依賴okio)。據(jù)說現(xiàn)在已被Google使用在Android源碼上了,可見其強(qiáng)大。
這里有一個(gè)大神張鴻洋開源的okhttp封裝庫
關(guān)于網(wǎng)絡(luò)請求庫,現(xiàn)在應(yīng)該還有很多人在使用android-async-http。他內(nèi)部使用的是HttpClient,但是Google貌似在6.0版本里面刪除了HttpClient相關(guān)API,可見這個(gè)庫現(xiàn)在有點(diǎn)過時(shí)了。
8.volley
這個(gè)庫也應(yīng)該比較熟悉了,Google官方出的一個(gè)庫,包含網(wǎng)絡(luò)請求和圖片加載緩存功能。在處理小而頻繁的網(wǎng)絡(luò)請求上有優(yōu)勢。
以前使用這個(gè)庫一般都是添加第三方依賴,比如android-volley 。現(xiàn)在已經(jīng)有官方Gradle依賴了 。
[java]view plaincopy
compile'com.android.volley:volley:1.0.0'
9.PagerSlidingTagStrip
這個(gè)庫使用比較也比較廣泛,實(shí)現(xiàn)ViewPage和頂部指示器聯(lián)動(dòng)滑動(dòng)的效果。
10.Android-PickerView
仿iOS的PickerView控件,有時(shí)間選擇和選項(xiàng)選擇并支持一二三級聯(lián)動(dòng)效果
這個(gè)庫的作者還有另外幾個(gè)開源庫也很不錯(cuò)的,有興趣的可以點(diǎn)上面鏈接去他的github上看下。
11.packer-ng-plugin
下一代Android打包工具,1000個(gè)渠道包只需要5秒
這個(gè)庫的作者mcxiaoke在下文還會(huì)出現(xiàn)的。
12.NineOldAndroids
View的屬性動(dòng)畫在Android API 11及其以后才支持,該庫的作用就是讓API 11以下的系統(tǒng)也能夠正常的使用屬性動(dòng)畫。不過該庫作者Jake Wharton(是的,又是這位大神)認(rèn)為現(xiàn)在APP支持的最低版本應(yīng)該是4.0了,所以不再更新了。
13.Logger
像作者說的一樣,簡單,漂亮,強(qiáng)大的一款日志打印工具。
14.materialish-progress
15.七牛
七牛云存儲,是專為移動(dòng)時(shí)代開發(fā)者打造的數(shù)據(jù)管理平臺,為互聯(lián)網(wǎng)網(wǎng)站和移動(dòng)App提供數(shù)據(jù)的在線托管、傳輸加速以及圖片、音視頻等富媒體的云處理服務(wù)。
說到數(shù)據(jù)管理平臺,我就會(huì)忍不住想到leancloud,大學(xué)那會(huì)弄畢設(shè)有使用到它,文檔對開發(fā)者非常友好,一直印象很深刻。
16.shareSDK
ShareSDK是為iOS、Android的App提供社會(huì)化功能的一個(gè)組件,幫助開發(fā)者實(shí)現(xiàn)社會(huì)化分享、登錄、關(guān)注、獲得用戶資料、獲取好友列表等主流的社會(huì)化功能。
17.友盟+
這里應(yīng)該是用到了友盟的數(shù)據(jù)統(tǒng)計(jì)分析服務(wù)以及自動(dòng)更新服務(wù),不過要注意的是自動(dòng)更新服務(wù)官方已經(jīng)發(fā)聲明表示停止新注冊的APP和當(dāng)前不再使用該功能的APP接入這項(xiàng)服務(wù),已經(jīng)在使用的在2016年10月15日之后也要停止服務(wù)了。
18.ViewPagerIndicator
這個(gè)庫的作者是Jake Wharton(沒看錯(cuò),還是這位大神),功能和上面介紹的PagerSlidingTagStrip類似,一般與viewpager組合使用。用法看這里
19.小米推送
小米推送服務(wù)支持所有Android平臺,在MIUI上屬于系統(tǒng)服務(wù)框架,共享系統(tǒng)級長連接。
共享系統(tǒng)級連接可以這么理解,理論上不管應(yīng)用是否在后臺運(yùn)行,只要有網(wǎng),就能收到推送。這個(gè)應(yīng)該是此APP選擇小米推送的重要原因。在MIUI系統(tǒng)上,相比其它第三方推送有先天優(yōu)勢。
20.greenDAO
在所有將對象映射到 SQLite 數(shù)據(jù)庫中的 ORM 庫中,greenDAO 在性能方面占很大優(yōu)勢。而且文檔也很詳細(xì)。
不過最近有一個(gè)比較火的跨平臺移動(dòng)數(shù)據(jù)庫引擎realm,支持iOS、OS X(Objective-C和Swift)以及Android。性能比原生的SQLite還要好。目標(biāo)是要取代SQLite。可以多關(guān)注下。
21.CircleImageView
一個(gè)使用很廣泛的圓形圖片庫
22.Crouton
這個(gè)庫功能類似于SnackBar,因?yàn)楣俜揭呀?jīng)出了SnackBar,所以作者停止了繼續(xù)更新這個(gè)庫。
23.BarcodeScanner
一個(gè)基于ZXing和ZBar的容易使用和擴(kuò)展的條形碼掃描庫
24.Rxjava
從去年開始,RxJava+的文章就一直在國內(nèi)網(wǎng)站各種刷屏了,最近還看到有公司招聘直接要求熟悉使用RxJava+Retrofit+OkHttp3了,可見其受歡迎程度。雖然這個(gè)庫的學(xué)習(xí)成本有點(diǎn)大,好在現(xiàn)在關(guān)于它的學(xué)習(xí)資料也很豐富。
很多RxJava的初學(xué)者應(yīng)該都有看過扔物線的這篇文章給Android 開發(fā)者的 RxJava 詳解。
還有上面提到的mcxiaoke組織翻譯的文檔ReactiveX/RxJava文檔中文版。
25.PhotoView
支持通過各種手勢來縮放圖片的一個(gè)庫,現(xiàn)在很多的APP內(nèi)都有使用到這個(gè)庫,很受歡迎。
總結(jié):在架構(gòu)一個(gè)項(xiàng)目時(shí),考慮項(xiàng)目需要用到的一些技術(shù)知識是已經(jīng)有成熟的框架的,就可以借鑒一下這篇文章!接下來準(zhǔn)備寫一個(gè)通用的android項(xiàng)目架構(gòu),集成第三方框架,到時(shí)候會(huì)上傳到Git開源出來!