寫(xiě)在前面
大學(xué)生活一下子就過(guò)去兩年了,在這里也小小地感慨一下,時(shí)間過(guò)得好快哦。最近心情比較復(fù)雜,所以大學(xué)生活究竟過(guò)得怎么樣,先不予置評(píng)。就像《歲月如歌》說(shuō)的那樣:
天氣不似如期
但要走 總要飛
生活總是要繼續(xù)的,生活中也還有很多我所珍視的東西。WakeUp課程表作為自己首個(gè)獨(dú)立作品,看著它從最原先的簡(jiǎn)陋,到現(xiàn)在基本功能還是都有了,且界面還是差強(qiáng)人意的,我還是有點(diǎn)成就感的。我不知道自己還能對(duì)它維護(hù)多久,可能到大三也就不更了?看心情吧,當(dāng)然也希望有人能接下這個(gè)工作。所以就寫(xiě)下這篇東西。查看項(xiàng)目點(diǎn)這里。如果你還不知道這個(gè)App長(zhǎng)什么樣,可以在主流的應(yīng)用商店搜索“WakeUp課程”,或者點(diǎn)擊這里。
負(fù)責(zé)任地說(shuō),其實(shí)入門(mén)Android并不需要掌握全部的Java特性,我當(dāng)時(shí)也算是一邊寫(xiě)Android一邊加深對(duì)Java的理解(其實(shí)到現(xiàn)在也還是在高級(jí)特性邊緣試探?)現(xiàn)在Google宣布Kotlin成為Android官方開(kāi)發(fā)語(yǔ)言,Kotlin看起來(lái)會(huì)簡(jiǎn)潔很多。也一直想用Kotlin重構(gòu)項(xiàng)目,還是看心情吧??瞬間感覺(jué)自己很佛系了。
廢話就不多說(shuō)了,還是推薦兩本書(shū)吧,《Java編程思想》和《第一行代碼:Android(第2版)》,兩本都比較厚,后面那本很適合Android入門(mén)。
這篇文章不是教你怎么進(jìn)行Android開(kāi)發(fā),只是讓你知道如果想修改某個(gè)功能應(yīng)該去哪里找。下面的內(nèi)容如果暫時(shí)沒(méi)看懂沒(méi)關(guān)系,可以慢慢來(lái)。我會(huì)在其中穿插一些開(kāi)發(fā)知識(shí)來(lái)幫助理解;如果是大佬在閱讀過(guò)程中覺(jué)得項(xiàng)目架構(gòu)有問(wèn)題(我自認(rèn)為是有問(wèn)題的),懇請(qǐng)指出。右邊有一個(gè)目錄,可以快速跳轉(zhuǎn)到自己需要看的位置。
項(xiàng)目總覽

如果你沒(méi)有安裝Android Studio,這個(gè)目錄結(jié)構(gòu)跟你在文件夾里看到的是不太一樣的,真實(shí)的文件夾包裹得有點(diǎn)深,不過(guò)相信聰明的你多點(diǎn)幾下就能有所發(fā)現(xiàn)。下面按照這個(gè)結(jié)構(gòu)來(lái)介紹各部分的大致內(nèi)容。
manifest
這個(gè)文件夾下的AndroidManifest.xml是一般Android項(xiàng)目都有的一個(gè)配置文件,是一個(gè)文本文件,可以用任何的文本編輯器打開(kāi)。
下面的內(nèi)容是聲明了App需要用到的權(quán)限,第一項(xiàng)是互聯(lián)網(wǎng)訪問(wèn)的權(quán)限,第二項(xiàng)是存儲(chǔ)空間寫(xiě)的權(quán)限?;ヂ?lián)網(wǎng)訪問(wèn)的權(quán)限一旦聲明,App就可以訪問(wèn)網(wǎng)絡(luò)連接的;Android有一些是敏感權(quán)限,比如這里的存儲(chǔ)空間讀寫(xiě)權(quán)限,在Android 5.0之后除了在這里聲明,還需要?jiǎng)討B(tài)去申請(qǐng)權(quán)限。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
下面這個(gè)部分是由application標(biāo)簽包裹的代碼塊,實(shí)際上比較長(zhǎng)。android:icon指明了App的圖標(biāo),android:label指明了App的顯示名稱。省略號(hào)部分就是注冊(cè)了各種activity、service等組件,這方面可以去自行搜索“Android四大基本組件”,此處就不展開(kāi)了。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
……
</application>
java
所有的Java代碼都集中在這個(gè)文件夾里面了,這里你會(huì)看到它有三個(gè)子文件夾,這是新建項(xiàng)目自動(dòng)生成的,一般看第一個(gè),其它兩個(gè)跟測(cè)試相關(guān)(我也沒(méi)用過(guò))。
com.suda.yzune.wakeupschedule
其實(shí)java下面的三個(gè)子文件夾都叫上面這個(gè)名字,后面兩個(gè)在后面會(huì)有(test)等標(biāo)注。這個(gè)長(zhǎng)長(zhǎng)的名字叫應(yīng)用包名,用于來(lái)唯一標(biāo)識(shí)Android應(yīng)用??梢钥吹竭@里又有很多子文件夾,這些文件夾都是我手動(dòng)創(chuàng)建的,是為了分類然后便于查看,這個(gè)分類不是很細(xì)致,有點(diǎn)馬虎的,但是還是能很快定位到自己要查看的代碼。
adapter

這些Adapter都是ListView、RecyclerView或者ViewPager的Adapter(好像說(shuō)得有點(diǎn)廢……)。
- ClassTimeAdapter是關(guān)聯(lián)了設(shè)置頁(yè)面-上課時(shí)間里面,那個(gè)選擇第幾節(jié)是什么時(shí)候開(kāi)始的RecyclerView。
- OtherCourseAdapter是關(guān)聯(lián)了側(cè)欄-我要蹭課里面可蹭課程的列表。
- SchedulePagerAdapter這個(gè)添加的時(shí)間不長(zhǎng),是為了做主界面左右滑動(dòng)切換周數(shù)加的,關(guān)聯(lián)了主界面那個(gè)ViewPager。
- TodayCourseAdapter是關(guān)聯(lián)了側(cè)欄-今日課程里面的課程列表。
model.bean

這里主要存放了一些自己定義的數(shù)據(jù)類:
- AppWidgetBean:用于管理桌面小部件的數(shù)據(jù)類,也是和數(shù)據(jù)庫(kù)GreenDao中表字段對(duì)應(yīng)的數(shù)據(jù)類,記錄了小部件的id和類型(日視圖為0,周視圖為1)。
- Course:課程表最核心的數(shù)據(jù)類,課程表主界面看到的一個(gè)色塊對(duì)應(yīng)就是一個(gè)Course對(duì)象。
- UpdateInfo:更新信息的數(shù)據(jù)類,每次檢查更新時(shí)都會(huì)把服務(wù)器返回的數(shù)據(jù)解析成這種對(duì)象。
后面兩種數(shù)據(jù)類一般都是搭配Gson來(lái)使用的,也就是用Gson對(duì)象把它們對(duì)應(yīng)的對(duì)象生成json字符串,或者是用Gson對(duì)象把相應(yīng)的json字符串解析成相應(yīng)的對(duì)象。
下面說(shuō)明一下Course類:
public class Course {
private String name, room, teach, id, campus;//課程名稱、上課教室、授課老師
//這個(gè)id是用來(lái)存放手動(dòng)調(diào)整顏色的編號(hào)的、campus是用來(lái)標(biāo)記蘇大校區(qū)的
int start, step, day, startWeek, endWeek, isOdd;
//開(kāi)始上課節(jié)次、課程的長(zhǎng)度(比如兩節(jié)課就為2)
//day是指星期幾(周一day的值為1)
//isOdd用來(lái)標(biāo)記單雙周(0為全周,1為單周,2為雙周)
long num;
……
}
service

這個(gè)service就是用來(lái)放后臺(tái)服務(wù)代碼的,而且都是關(guān)于桌面小部件的更新服務(wù)。
- ListViewService:負(fù)責(zé)每日課程小部件中列表的更新。
- ScheduleWidgetService:負(fù)責(zé)周視圖小部件中課程的更新。
utils

集中存放工具類,不過(guò)有點(diǎn)雜亂。誒……感覺(jué)如果要解釋可以新寫(xiě)一篇博文了。這里就簡(jiǎn)單說(shuō)一說(shuō)好了。
- BaseDao、DaoManager、DaoUtils、WidgetDaoManager:對(duì)GreenDao封裝的工具類,在小部件相關(guān)的代碼可以看到它們的身影。我是很遲才在項(xiàng)目中引入了數(shù)據(jù)庫(kù)這個(gè)工具,同類的App好像一開(kāi)始就是用數(shù)據(jù)庫(kù)來(lái)儲(chǔ)存課程信息的,羞愧羞愧。
- Config:目前這個(gè)工具類沒(méi)有用,里面放的是語(yǔ)音識(shí)別服務(wù)的密鑰之類的,之前想做一個(gè)語(yǔ)音輸入課表的功能,奈何識(shí)別準(zhǔn)確率太低。
- Constants:里面放了一些常量,比如教務(wù)系統(tǒng)網(wǎng)址、驗(yàn)證碼網(wǎng)址,還有檢查更新的地址等。
- CourseUtils:跟課程處理有關(guān)的工具類,但是里面放的東西比較雜。makeCourseTogether這個(gè)函數(shù)是針對(duì)從蘇大教務(wù)獲取的課程分節(jié)的情況的,讓相同的連續(xù)的課程結(jié)合在一起;post這個(gè)函數(shù)是將蘇大課程傳回服務(wù)器的;showCampusChoose用來(lái)顯示對(duì)話框來(lái)讓蘇大學(xué)生選擇所在校區(qū);calAfterTime用來(lái)計(jì)算下課時(shí)間。
- DisplayUtil:跟顯示相關(guān)的工具類,里面有幾個(gè)常用的單位轉(zhuǎn)換函數(shù),比如dp轉(zhuǎn)換成px。
- DonateUtils:跟捐贈(zèng)有關(guān)的工具類,里面是有冗余代碼的,有用的是isAppInstalled這個(gè)函數(shù),用來(lái)檢測(cè)某個(gè)App是否安裝了,我用來(lái)檢測(cè)支付寶是否安裝了。
- GlideAppEngine:這個(gè)是為了讓知乎開(kāi)源的圖片選擇庫(kù)兼容Glide新版本,而繼承的一個(gè)類。
- JsonUtils:只是用來(lái)檢測(cè)Json是否合法的工具類,運(yùn)用在側(cè)欄-恢復(fù)那里。
- MyCookieJar:模擬登陸時(shí)需要的……可以不用管。
- MyRadioGroup:其實(shí)這個(gè)不應(yīng)該放在工具集合這里,這是自定義的單選按鈕組,修改課程顏色的時(shí)候你會(huì)看到它,原生的RadioGroup不能分行。
- OkHttpUtil:這個(gè)是很重要的封裝了OkHttp的工具類,主要用于模擬登陸教務(wù)系統(tǒng)。
- SharePreferencesUtils:這個(gè)類可以很方便地將int、String、boolean等數(shù)據(jù)通過(guò)SharePreferences儲(chǔ)存起來(lái),也可以取出來(lái)。因?yàn)轫?xiàng)目中大量用到了SharePreferences,課程信息和設(shè)置都是通過(guò)這個(gè)儲(chǔ)存起來(lái)的??
- UpdateUtil:檢查更新的代碼在里面。
- ViewUtil:里面只有一個(gè)函數(shù),就是取消activity的toolbar以及使其頂欄沉浸。
啊,這部分終于粗略地介紹完了。
view

接下來(lái)是這個(gè)view了,顧名思義,view就是我們能夠看到的視圖部分,所以這里面放的都是直接負(fù)責(zé)App界面操作的代碼,當(dāng)然后面還會(huì)說(shuō)到它們對(duì)應(yīng)的布局代碼。
- AboutActivity:點(diǎn)擊 側(cè)欄-關(guān)于 出現(xiàn)的界面,里面的內(nèi)容除了App版本號(hào)以外,其他部分都是固定的,版本號(hào)會(huì)隨著工程文件的變化而變化。
- DecodeActivity:這個(gè)我沒(méi)有把入口暴露出來(lái),它是一個(gè)解析蘇大教務(wù)課程HTML的界面,大體上就是把網(wǎng)頁(yè)源碼復(fù)制到上面,就可以生成課程表。
- DonateActivity:捐贈(zèng)頁(yè)面,如果想把捐贈(zèng)的支付寶賬號(hào)改成自己的,修改里面的qrcode_url即可。
- FixActivity:電腦義修頁(yè)面,核心函數(shù)是startQQChat,會(huì)根據(jù)里面的參數(shù)發(fā)起QQ聊天。
- IntroActivity:如果是一路升級(jí)過(guò)來(lái)的朋友應(yīng)該不會(huì)看到這個(gè)頁(yè)面,這個(gè)是寒假的時(shí)候加入的引導(dǎo)頁(yè)。里面使用了一個(gè)第三方開(kāi)源庫(kù),關(guān)于項(xiàng)目中開(kāi)源庫(kù)的使用會(huì)在下文集中說(shuō)明。
- LoginXKActivity:剛開(kāi)始課程表登錄蘇大教務(wù)是用網(wǎng)頁(yè)形式登錄的,不太友好。而這個(gè)是那個(gè)友好的登錄頁(yè)面。模擬登錄、HTML解析的代碼都在這里,把一個(gè)activity寫(xiě)得這樣“胖”是不太好的,這里我確實(shí)沒(méi)有把模塊分離好。尤其是HTML的解析代碼其實(shí)在項(xiàng)目中復(fù)制著用了好幾次,這個(gè)完全可以封裝成一個(gè)工具類的。
- MainActivity:這個(gè)就是我們一開(kāi)始的網(wǎng)頁(yè)登錄界面,里面有一個(gè)WebView。然后課程解析部分的代碼跟上面的是重復(fù)了的。我的建議是,除非你有十足的把握,不然還是不要改動(dòng),因?yàn)檫@里涉及到了Java對(duì)JavaScript的調(diào)用。這個(gè)頁(yè)面保留著,是因?yàn)樯贁?shù)人用上面的界面登錄會(huì)遇到驗(yàn)證碼一直錯(cuò)誤的問(wèn)題,如果錯(cuò)誤次數(shù)多了,就會(huì)開(kāi)放這個(gè)頁(yè)面的入口,用網(wǎng)頁(yè)的形式進(jìn)行登錄。
- ScheduleActivity:這個(gè)就是日常我們見(jiàn)到的主界面。在之前,它負(fù)責(zé)了課程的顯示,還有側(cè)欄也是依托在這里的;現(xiàn)在,在主界面支持左右滑動(dòng)切換每周課程后,它不再直接負(fù)責(zé)課程的顯示,而是在刷新界面時(shí)計(jì)算當(dāng)前周數(shù)。當(dāng)我們介紹到它對(duì)應(yīng)的布局時(shí),你應(yīng)該會(huì)更加清晰一點(diǎn)。
- SettingsActivity:設(shè)置界面,在這里你會(huì)看到SharePreferencesUtils工具類的頻繁使用,因?yàn)檫@些設(shè)置的參數(shù)都是以SharePreferences的形式保存的。
- ShareActivity:側(cè)欄-分享/備份的界面,里面有個(gè)函數(shù)對(duì)系統(tǒng)剪貼板進(jìn)行操作,里面也能找到屬性動(dòng)畫(huà)的運(yùn)用例子。
- ThemeSettingsActivity:側(cè)欄-自定風(fēng)格的界面,部分設(shè)置項(xiàng)跟SettingsActivity有重復(fù)。里面本來(lái)有一個(gè)主界面背景模糊程度的調(diào)節(jié)功能,但是我測(cè)試起來(lái)有點(diǎn)小問(wèn)題,就是設(shè)置后會(huì)有模糊效果,但是這個(gè)模糊效果不隨設(shè)置的數(shù)字改變而改變。
- TimeSettingActivity:設(shè)置-設(shè)置上課時(shí)間的界面,里面有個(gè)RecyclerView,上面在說(shuō)Adapter的時(shí)候有提到。
- TodayCourseActivity:今日課程的界面,我個(gè)人感覺(jué)這個(gè)比較少人打開(kāi)……
- ViewOtherCourse:蹭課的界面,我發(fā)現(xiàn) 你好蘇大 是有蹭課接口的,到時(shí)候可以研究研究。
上面的都是activity,下面介紹一下fragment。每個(gè)fragment都是依賴于上面的某個(gè)activity的。
- Intro1Fragment、Intro2Fragment、Intro3Fragment:配合IntroActivity使用的,對(duì)應(yīng)三個(gè)引導(dǎo)界面。有部分設(shè)置現(xiàn)在是放到引導(dǎo)界面去設(shè)置的,比如在第二個(gè)引導(dǎo)界面設(shè)置是蘇大的還是其他大學(xué)的。這三個(gè)界面不算得很精致,如果可以的話要重新設(shè)計(jì)一下。
- ScheduleFragment:配合ScheduleActivity使用。ScheduleActivity在初始化時(shí)會(huì)新建25個(gè)ScheduleFragment對(duì)象,對(duì)應(yīng)25個(gè)周,由于Android的回收機(jī)制,這個(gè)對(duì)性能的影響不太大的。目前發(fā)現(xiàn)的問(wèn)題是旋轉(zhuǎn)屏幕時(shí)界面會(huì)空白,這可能跟Fragment的生命周期有關(guān)。
還會(huì)看到下面還有ScheduleWidget和TodayWidget,對(duì)應(yīng)兩種桌面小部件。我個(gè)人感覺(jué)目前網(wǎng)上關(guān)于AppWidget的資料都是翻譯了一下官方文檔,或者是太舊了,反正怎么都不太符合業(yè)務(wù)需求。我會(huì)考慮寫(xiě)一篇單獨(dú)介紹AppWidget的文章。
MyAppGlideModule

你也許會(huì)注意到這個(gè)雖然在java文件夾下,但是也不屬于上面的任何一個(gè)子文件夾。這個(gè)是為了解決Glide這個(gè)圖片加載庫(kù)新舊版的兼容性問(wèn)題,不能刪除。
res

終于把java這個(gè)文件夾介紹完了?,F(xiàn)在輪到res了,這是resource的簡(jiǎn)寫(xiě),里面主要存放的是項(xiàng)目的資源文件,包括xml文件、圖片等。
anim

這是存放動(dòng)畫(huà)xml文件的文件夾,logo_jump.xml是第一個(gè)引導(dǎo)頁(yè)面的小鹿飛躍動(dòng)畫(huà)效果的控制文件。
drawable
這個(gè)文件夾里是各種圖片資源,文件實(shí)在太多了截圖截不過(guò)來(lái),各個(gè)文件分別是什么用途,可以打開(kāi)下面的布局文件去查看。一般來(lái)說(shuō),App的體積大小主要取決于資源文件的大小。加入新的圖片時(shí)應(yīng)該注意適當(dāng)壓縮一下圖片,在質(zhì)量和大小之間把握平衡。還有要注意命名要有規(guī)律,有規(guī)律的命名可以讓自己一看就知道這個(gè)資源是用在哪里的(我這里的命名也不是特別規(guī)范,因人而異)。
layout

這里就是布局文件了,絕對(duì)要比上面的Java代碼要有意思,因?yàn)樵贏ndroid Studio中,這些布局文件都是可視化的,下面是一個(gè)例子:

這是我們的登錄界面,中間部分的代碼改動(dòng)會(huì)在右邊的可視化界面體現(xiàn)出來(lái)。不過(guò)右邊的可視化界面并不是100%還原的,比如我們實(shí)際運(yùn)行時(shí)看到的登錄界面是沒(méi)有粉紅色的工具欄的。借助這個(gè)基本實(shí)時(shí)的可視化界面,你可以自由地修改我們現(xiàn)有的界面。
看到中間界面左上角那個(gè)C按鈕了嗎?點(diǎn)擊它就可以跳轉(zhuǎn)到對(duì)應(yīng)界面的Java代碼。同樣,在Java代碼顯示區(qū)的左上角,也有一個(gè)跳轉(zhuǎn)到布局文件的按鈕,可以很方便地來(lái)回切換。布局文件和Java代碼一起看,會(huì)加深你對(duì)其功能的理解。
menu

這個(gè)是用來(lái)放菜單的,而里面只有一個(gè)文件,這個(gè)是關(guān)于側(cè)欄菜單內(nèi)容的文件。當(dāng)你點(diǎn)開(kāi)它時(shí),它是下面這樣一個(gè)界面:

這跟上面的可視化界面不太一樣,但是不影響你去修改它??梢钥吹?,一個(gè)item對(duì)應(yīng)一個(gè)菜單的選項(xiàng),可以指定它的id、圖標(biāo)和標(biāo)題。
mimap

這里放的是App啟動(dòng)圖標(biāo),ic_launcher.png就是App的啟動(dòng)圖標(biāo),有很多個(gè)不同尺寸的版本。fix_launcher.png和today_launcher.png是shortcuts中顯示的兩個(gè)圖標(biāo),shortcuts不是所有ROM都支持的,你可以嘗試一下長(zhǎng)按課程表App的啟動(dòng)圖標(biāo),看看有沒(méi)有shortcuts出現(xiàn)。
values

這里放著一些資源常量,比如顏色、字符串、styles等等。在寫(xiě)這個(gè)項(xiàng)目的時(shí)候沒(méi)有考慮過(guò)項(xiàng)目國(guó)際化的問(wèn)題……所以無(wú)論你的系統(tǒng)是什么語(yǔ)言,App都只有簡(jiǎn)體中文。如果要做項(xiàng)目國(guó)際化的話,需要在strings.xml定義。嗯……工作量是有點(diǎn)大的。
xml

這里是一些配置文件而不是資源文件。其中:
- schedule_widget_info.xml和today_widget_info.xml都是桌面小部件的配置文件,配置了小部件的更新頻率、初始化尺寸等信息。桌面小部件會(huì)另開(kāi)一篇來(lái)寫(xiě)。
- shortcuts.xml是shortcuts的配置文件,是靜態(tài)的。一般來(lái)說(shuō)靜態(tài)的也夠用了,感覺(jué)shortcuts這個(gè)功能并沒(méi)有普及開(kāi)來(lái)……
項(xiàng)目總配置

Gradle Scripts里面是項(xiàng)目總體的配置,一般來(lái)說(shuō)只需要修改兩個(gè)文件,其他文件最好不要修改。
上面說(shuō)的兩個(gè)文件它們的實(shí)際名字都是一樣的,都是build.gradle,不過(guò)實(shí)際存放在不同的文件夾里,作用也不太一樣。
- build.gradle(Project:……)這個(gè)一般在添加第三方庫(kù)的時(shí)候需要配置一下。
- build.gradle(Module:app)這個(gè)可以修改的地方就很多了,下面舉些例子。
minSdkVersion 21
targetSdkVersion 27
versionCode 19
versionName "2.10"
上面這段中:
- minSdkVersion是項(xiàng)目最低sdk的版本,決定了你的應(yīng)用最低可以安裝在哪個(gè)Android版本上,這里的21是指Android 5.0,也就意味著Android 4.4上無(wú)法安裝這個(gè)App。一般來(lái)說(shuō)要兼容更低的Android版本會(huì)增加你的工作量。
- targetSdkVersion是項(xiàng)目的目標(biāo)sdk版本,如果你要用到新平臺(tái)的新特性,就需要修改這里。
- versionCode后面是一個(gè)數(shù)字,用來(lái)表示版本更迭,每一次推出正式的更新是都應(yīng)該增加這個(gè)數(shù)字。
- versionName后面跟的是一個(gè)字符串,其實(shí)也不一定要是數(shù)字字符串,可以弄一些好玩的,每個(gè)版本之前有區(qū)分度就行。
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:27.0.2'
compile 'com.android.support:support-v4:27.0.2'
compile 'com.android.support:design:27.0.2'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.google.code.gson:gson:2.7'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.android.support:cardview-v7:27.0.2'
compile 'com.github.apl-devs:appintro:v4.2.2'
compile 'com.github.GrenderG:Toasty:1.2.8'
compile 'com.tapadoo.android:alerter:2.0.0'
compile 'com.zhihu.android:matisse:0.4.3'
compile 'com.github.bumptech.glide:glide:4.6.1'
compile 'com.github.florent37:glidepalette:2.1.2'
compile 'jp.wasabeef:glide-transformations:3.1.0'
compile 'org.greenrobot:greendao:3.2.2'
annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'
testCompile 'junit:junit:4.12'
}
上面這一段是我們用來(lái)添加第三方庫(kù)的,下面會(huì)介紹項(xiàng)目中第三方庫(kù)的使用情況。
第三方庫(kù)的使用情況
support庫(kù)
上面以com.android.support開(kāi)頭的就是support庫(kù),這些support庫(kù)可以使App在各個(gè)版本保持同樣的用戶體驗(yàn),比如在Android 5.0以下系統(tǒng)使用Material Design。如果想對(duì)它了解更多,可以參考這篇文章:Android Support Library的前世今生。
OkHttp庫(kù)
OkHttp是具有高效的請(qǐng)求效率的網(wǎng)絡(luò)請(qǐng)求庫(kù),項(xiàng)目中把其進(jìn)行再次封裝成為一個(gè)工具庫(kù)。學(xué)習(xí)網(wǎng)絡(luò)請(qǐng)求方面的知識(shí),可以參考:OkHttp使用完全教程。
Gson庫(kù)
JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,常見(jiàn)于網(wǎng)絡(luò)數(shù)據(jù)的傳送。在項(xiàng)目中不僅用于網(wǎng)絡(luò)數(shù)據(jù)的傳送,還將其用于信息的本地存儲(chǔ)。而Gson,是一個(gè)Google的一個(gè)解析和生成Json的開(kāi)源庫(kù)??梢詤⒖迹?a href="http://www.itdecent.cn/p/e740196225a4" target="_blank">你真的會(huì)用Gson嗎?Gson使用指南。
AppIntro庫(kù)
AppIntro庫(kù)可以讓你快速生成美觀的引導(dǎo)界面,GitHub地址在這里,里面有開(kāi)發(fā)者寫(xiě)的使用文檔,能滿足一般使用。
[站外圖片上傳中...(image-783b74-1523195636642)]
Toasty庫(kù)
Toasty庫(kù)是用來(lái)代替系統(tǒng)自帶的Toast通知的,Toasty的樣式更加多,還允許很方便地自定義樣式,GitHub地址在這里,里面有開(kāi)發(fā)者寫(xiě)的使用文檔,能滿足一般使用。

Alerter庫(kù)
Alerter庫(kù)在項(xiàng)目中用作用戶操作的提醒,很有動(dòng)感,比較醒目,GitHub地址在這里,里面有開(kāi)發(fā)者寫(xiě)的使用文檔,能滿足一般使用。
[站外圖片上傳中...(image-e89646-1523195636642)]
matisse庫(kù)
matisse是知乎開(kāi)源、界面優(yōu)美的圖片/視頻選擇庫(kù),可以自定義主題,以及定義一些過(guò)濾規(guī)則等,而且集成起來(lái)還是很方便的。項(xiàng)目GitHub地址在這里,里面有使用文檔,能滿足一般使用。
[站外圖片上傳中...(image-6ec6f4-1523195636642)]
[站外圖片上傳中...(image-3031e9-1523195636642)]
Glide庫(kù)
Glide是一個(gè)快速高效的Android圖片加載庫(kù),注重于平滑的滾動(dòng)。Glide給我的感覺(jué)是很強(qiáng)大的,在網(wǎng)上的教程也非常多。GitHub地址在這里,然后這里有一份中文文檔。
[站外圖片上傳中...(image-a2a40a-1523195636642)]
GlidePalette庫(kù)
GlidePalette是一個(gè)配合Glide使用的取色庫(kù),可以提取圖片中明亮、鮮艷、主要等顏色,最多有6種取色方案,可以令圖片很好地與環(huán)境融合。項(xiàng)目GitHub地址在這里,里面有使用文檔,能滿足一般使用。
[站外圖片上傳中...(image-a9eb28-1523195636642)]
glide-transformations庫(kù)
glide-transformations是一個(gè)配合Glide使用的變換庫(kù),可以將在顯示時(shí)變換圖片,比如高斯模糊、或者黑白化、或者讓圖片圓形顯示。項(xiàng)目GitHub地址在這里,里面有使用文檔,能滿足一般使用。
greenDAO庫(kù)
greenDAO是一款開(kāi)源的面向Android的輕便、快捷的ORM框架,將 Java對(duì)象映射到SQLite數(shù)據(jù)庫(kù)中,我們操作數(shù)據(jù)庫(kù)的時(shí)候,不在需要編寫(xiě)復(fù)雜的SQL語(yǔ)句,在性能方面,greenDAO針對(duì)Android進(jìn)行了高度優(yōu)化,最小的內(nèi)存開(kāi)銷、依賴體積小同時(shí)還支持?jǐn)?shù)據(jù)庫(kù)加密。項(xiàng)目GitHub地址在這里,這個(gè)庫(kù)個(gè)人感覺(jué)需要閱讀多幾篇教程才行,自己搜索豐衣足食哦。
好啦,以上就是第三方庫(kù)的使用情況,我也是做過(guò)很對(duì)比才決定使用它們的,它們也沒(méi)有讓我失望啦。當(dāng)然它們能夠發(fā)揮更為出彩的,前提是要了解得更為深入。
結(jié)語(yǔ)
如果你看到了這里,非常感謝你的耐心,這篇只是初略地講了一下項(xiàng)目目前的大體情況,可能在你看來(lái)沒(méi)有什么干貨。做這個(gè)項(xiàng)目我還是收獲了很多的,不過(guò)整理起來(lái)都需要時(shí)間。碼一篇博文還是蠻累的,還是貴在堅(jiān)持吧。