1. 程式人生 > >教你如何開發一款實用的完整Android App,附原始碼

教你如何開發一款實用的完整Android App,附原始碼

0?wx_fmt=gif&wxfrom=5&wx_lazy=1

熱文導讀 | 點選標題閱讀

作者:OCNYang

連結:https://juejin.im/post/5a320ffb51882561a20a7d5d

最近利用閒暇時間,寫了一款生活工具類的應用,開始的目的也主要是為了熟練一些老框架和熟悉一些新框架或者第三方庫,大家可以把它看成一款練手的 Demo 應用吧!

這裡把自己在這個應用中用的庫總結一下,還有一些大家感興趣的實現效果也在這裡給大家說明一下,大家在開發中作為一種參考吧。

原始碼及下載地址

這裡是這款應用的下載地址和演示視訊,大家可以下載把玩一下:

  • 小秋魔盒下載地址:

    https://mobile.baidu.com/item?type=soft&docid=21930773  

  • 小秋魔盒演示視訊:

    http://v.youku.com/v_show/id_XMjcyMDkwMjM2MA==.html

  • 原始碼:https://github.com/OCNYang/QBox


第三方庫

下面進入重點,主要介紹一下開發中採用的庫第三方框架和庫(截圖較多,手機流量黨慎入)。

1. 應用的整體框架(Rxjava + Retrofit + okhttp 網路請求框架)

在以前的專案中採用的網路請求框架,基本上都是使用的封裝好的 okhttp 框架,不過最近一兩年,Rxjava + Retrofit 十分熱門勢頭很盛。

作為開發者,總是要去學習和接受採用這些新出來的技術。在開發的世界裡,永遠是技術至上,一門新技術的盛行總是有它的優越之處,要麼比老框架效能提升不少,要不更加易用等等。

0?wx_fmt=png

對於 Rxjava + Retrofit + okhttp 相結合的使用,個人建議目前不要去網上找那些所謂的封裝好的庫什麼的,大家還是原生的使用 Rxjava 和 Retrofit,雖然程式碼上有些繁瑣但是這樣一來大家能夠更快的熟悉它們的各個用法。(同時,表示目前我也沒有找到能夠把它們封裝十分完善的庫)。

三個庫的官方地址請自行查詢,這裡提供一個介紹用法的 Demo 地址(個人也是參考這個使用的)


Github地址:
https://github.com/rengwuxian/RxJavaSamples

如果對這三個庫的基本用法還不太熟悉的,可以參考一下下面我收集的一些教程:

Rxjava 教程  
給 Android 開發者的 RxJava 詳解: 

https://gank.io/post/560e15be2dca930e00da1083#toc_5  
Okhttp 教程:  

http://ocnyang.com/tags/OkHttp/  
Retrofit2 教程:  
http://ocnyang.com/tags/Retrofit2/

2. 一些通用且常用的框架(Glide、leakcanary、Logger等等)

Logger 日誌列印  
https://github.com/orhanobut/logger

GsonFormat & Gson json 資料解析  
https://github.com/zzz40500/GsonFormat  
https://github.com/google/gson

butterknife 依賴注入框架  
https://github.com/JakeWharton/butterknife

leakcanary 記憶體洩漏檢測工具  
https://github.com/square/leakcanary

Glide 圖片請求庫  
https://github.com/bumptech/glide  
教程地址:http://ocnyang.com/tags/Glide/

circleimageview 圓形圖片庫  
https://github.com/hdodenhof/CircleImageView

greenDAO 資料庫  
https://github.com/greenrobot/greenDAO

eventbus 事件釋出/訂閱框架  
https://github.com/greenrobot/EventBus

3. 常用第三方平臺的使用(推送 + 社會化分享登入 + 簡訊驗證)

這裡先說一下,其實目前國內市場有相同功能的各個平臺基本上趨於同質化,選擇哪個也沒必要那麼糾結,效率相差不會太大。

  1. 小米推送(本來沒想用小米的,抵不住前幾年小米手機買的好名氣大,我就用用試試。這裡說一下和其他平臺相比的不足點,小米推送目前不支援富文字的但是效率是很不錯的。)

  2. ShareSDK Mob 平臺的社會化分享和登入

  3. SMSSDK Mob 平臺的手機簡訊驗證(感覺 Mob 平臺名氣穩健,一方面是名字取得好呀,一方面永久免費)

  4. 友盟統計 (這個小應用大部分都會用吧)

4. 一些針對功能的開源庫

BaseRecyclerViewAdapterHelper RecycleView 拓展庫


無論在哪個專案,可能使用相對比較頻繁的就是列表了,這裡先說一下自己選取列表庫。如果你還在著重用ListView/GridView,你真的需要抽出一點時間還研究研究一下 RecyclerView 的用法了。

RecyclerView 的使用我想大家已經在日常開發中已經頻繁使用了,現在針對 RecyclerView 的封裝庫也已經是遍地都是了,Github 上 star 過千的也很多很多了。


大家可以看看這位朋友總結的 RecyclerView 庫的集合,你一定會眼花繚亂的:

《那些酷炫的RecyclerView開源庫整理》

 http://www.jianshu.com/p/154891851fe2

而我這當初在對比多個庫後最終選擇了 BaseRecyclerViewAdapterHelper 這個庫,原因這個簡單說一下:自己在選擇時的標準是:

  • 列表要有的功能要全(新增 Header&Footer,下拉重新整理頁面,上拉載入更多這些基本的功能都要有);

  • 不能有入侵性,所謂入侵性就是不能對原生態使用有本質的改變,比如有些框架要求你在使用時使用 SuperRecycleView 諸如這些自定義的控制元件名,更有甚者有時候看這些框架原始碼才發現,它內部竟然是繼承封裝的 LinearLayout;有些要求你在使用原有控制元件時,需要在原有控制元件外部巢狀一層父佈局,這點也是不能容忍的。

  • 這裡簡介一下 BaseRecyclerViewAdapterHelper,這個框架入侵性非常小,佈局時你不需要任何改變,需要下拉重新整理時,你可以像從前一樣在外部巢狀一層 SwipeRefreshLayout 就好了。同時載入動畫,載入失敗等的佈局你另外設定就行了,新增 header/footer 你新建一個佈局通過 .add(header) 就很輕易的新增上了。
    BaseRecyclerViewAdapterHelper 這個框架從命名上你大概就能看出來,它的入侵體現在 Adapter 上,但是 Adapter 的職責是資料適配填充,對它的入侵在我看來是可以接受的。

這裡就說這麼多,感興趣的話自己可以到 Github 上了解一下具體用法(說明文件還算友好,建議參考Demo看):
Github 地址:

https://github.com/CymChad/BaseRecyclerViewAdapterHelper

這裡向大家展示一下在“小秋魔盒”中的使用:

多佈局:

0?wx_fmt=png

拖曳

0?wx_fmt=gif

新增 Header & Footer

0?wx_fmt=gif

ReactiveNetwork 手機網路連線狀態動態監控  

現在的應用中,常常用到例如 WiFi 網路下顯示圖片,而手機流量下不顯示圖片的需求,這個時候就需要隨時監聽手機網路的連線和斷開、WiFi和流量的切換,以便隨時做出相應的變化。
ReactiveNetwork 這個庫能夠幫你做到這一點。這個庫我也是無意中發現的,具體的用法大家可以自己檢視:
Github地址:

https://github.com/pwittchen/ReactiveNetwork

colorpicker 顏色畫板選擇庫  

0?wx_fmt=png

類似的庫也有很多,但還是喜歡這個。

https://github.com/QuadFlask/colorpicker

BGAQRCode-Android 二維碼掃描專案

0?wx_fmt=gif

二維碼掃描|圖片來自Github

作者本身也是改造的別人的一個庫,如果你的專案中需要二維碼掃描且同時要求不是太高,可以考慮使用此庫。

Github 地址:

https://github.com/bingoogolapple/BGAQRCode-Android

MPAndroidChart 圖表庫

0?wx_fmt=gif

在 Android 開發中使用過圖表的,應該都會知道這個庫吧。這個庫是真心強大的不能強大的開源庫,能滿足你大多的圖示圖需求了。

Github 地址:

https://github.com/PhilJay/MPAndroidChart

material-calendarview 材料設計日曆控制元件

0?wx_fmt=png

改造後支援農曆和節假日查詢的日曆,很漂亮的一個日曆控制元件,可拓展性也很不錯。

Github 地址:

https://github.com/prolificinteractive/material-calendarview

flexbox-layout 盒子佈局控制元件

0?wx_fmt=png

Github 地址:

https://github.com/google/flexbox-layout  

相應的教程也有很多,大家自行 Google 吧。

KenBurnsView 視差圖片控制元件

0?wx_fmt=gif

有時候專案中應用一下,這種效果還是很不錯的。

Github 地址:

https://github.com/flavioarfaria/KenBurnsView

materialsearchview 材料設計搜尋框

0?wx_fmt=gif

Github 地址:

https://github.com/MiguelCatalan/MaterialSearchView

MagicIndicator 指示器庫

0?wx_fmt=png

這個庫,目前發現多多少少還是有一點bug的。

MagicIndicator 地址:

https://github.com/hackware1993/MagicIndicator

Android應用自動更新庫(android-auto-update)

一個應用本地自動更新的庫,Dialog & Notification 兩種形式都支援,還是很不錯的。
專案地址:

https://github.com/feicien/android-auto-update

Slidinglayout 果凍彈跳效果

0?wx_fmt=gif

這種效果在QQ上大家應用很常見,一般情況下都是用在 WebView 上吧,當然你還可以用在其他地方,發揮你的想象力。


Github 地址:

https://github.com/HomHomLin/SlidingLayout

SlidingTutorial-Android 引導頁

0?wx_fmt=gif

0?wx_fmt=png

根據Demo直接使用,可定製的東西很少,當然引導頁本身也沒什麼可定製的,就看自己喜歡不喜歡這個引導頁的設計。這裡給出了兩個庫,我在應用中採用的是第一個,大家欣賞一下就行了。

SlidingTutorial-Android專案地址:

https://github.com/Cleveroad/slidingtutorial-android  
AppIntro Github 地址:

https://github.com/apl-devs/AppIntro

Android 許可權的動態申請

從 Android 6.0 開始,部分高階許可權需要動態申請,在以前的版本中是在安裝應用時一次性許可所有許可權的申請,但是 6.0 以後,安裝後只會預設允許部分低許可權,高階許可權需要你手動申請使用者開通,如果你不做申請在應用許可權的介面會閃退崩潰。

相信一線開發者早就知道這些了,這裡給出幾個可以幫助你動態申請許可權的庫:

  • PermissionsDispatcher 地址(目前應用中使用的是這個):https://github.com/hotchemi/PermissionsDispatcher

  • RxPermissions 地址:

    https://github.com/tbruyelle/RxPermissions

  • easypermissions 地址(貌似大家更青睞這個,不知道為什麼):https://github.com/googlesamples/easypermissions

Android 圖片手勢控制元件

0?wx_fmt=gif

Github 地址:

https://github.com/boycy815/PinchImageView

結尾

好了,對庫就總結這麼多吧。如果大家在玩“小秋魔盒”時遇到什麼問題都可以在下方留言,如果對應用中的某個功能的實現效果有疑問也可以下方留言,如果我感覺有必要的話,會寫一些相應的教程給大家。

目前也已經在 Github 上建了相應的專案,同時也在上面更加詳細的總結了用到的第三方庫和相關功能的實現,大家可以看看:

小秋魔盒 Github 地址:

https://github.com/OCNYang/QBox   

Java和Android架構

微信掃描或者點選下方二維碼領取Android\Python\AI\Java等高階進階資源

關注後回覆“百度”、“阿里”、“騰訊”、“資源”有驚喜

640?wx_fmt=jpeg

公眾號:JANiubility

歡迎加入我們的Java和Android架構圈,已有近1000人加入學習交流,更多學習資源更新,更多交流進步

640?wx_fmt=png

更多學習資料點選下面的“閱讀原文”獲取

0?wx_fmt=gif