對(duì)于新手來說,一開始學(xué)習(xí)Android開發(fā)會(huì)感覺很難。就像初次踏入異國他鄉(xiāng)一樣,即使會(huì)說當(dāng)?shù)卣Z言,一開始也絕不會(huì)有舒服自在的感覺。學(xué)習(xí)者不能理解周圍人習(xí)以為常的東西,其原有的知識(shí)儲(chǔ)備在新環(huán)境下也完全派不上用場(chǎng)。
Android有自己使用的編程語言Kotlin或Java語言(或者兩者兼而有之)。但要深入理解Android,僅掌握Kotlin或Java還不夠,學(xué)習(xí)者還需要學(xué)習(xí)諸多新理論和新技術(shù)。涉足陌生領(lǐng)域時(shí),有個(gè)向?qū)?huì)很有幫助,這就是本書的作用所在。
在Big Nerd Ranch,要成為一名Android開發(fā)人員,學(xué)習(xí)者必須:
充分理解Android應(yīng)用;
著手開發(fā)一些Android應(yīng)用。
本書將協(xié)助學(xué)習(xí)者完成以上兩件事,將指導(dǎo)學(xué)習(xí)者開發(fā)多個(gè)Android應(yīng)用,并根據(jù)需要介紹各種概念和技術(shù)。我們會(huì)盡最大努力抽絲剝繭,讓學(xué)習(xí)者知其然更知其所以然。在學(xué)習(xí)過程中,如果遇到知識(shí)疑難點(diǎn),請(qǐng)勇敢面對(duì)。
本書秉承的教學(xué)方法是: 在學(xué)習(xí)理論的同時(shí)就著手運(yùn)用它們開發(fā)實(shí)際應(yīng)用,而非先學(xué)習(xí)一大堆理論,再考慮如何將其應(yīng)用于實(shí)踐。讀完本書,學(xué)習(xí)者將具備必要的開發(fā)經(jīng)驗(yàn)和知識(shí)。以此為起點(diǎn),深入學(xué)習(xí),學(xué)習(xí)者會(huì)逐漸成長為一名合格的Android開發(fā)者。
閱讀前提
使用本書的一個(gè)重要前提是學(xué)習(xí)者熟悉Kotlin語言,包括類、對(duì)象、接口、監(jiān)聽器、包、內(nèi)部類、對(duì)象表達(dá)式以及泛型類等基本概念。如果不熟悉這些概念,可能沒翻幾頁就會(huì)看不下去本書了。對(duì)此,建議先放下本書,找本Kotlin入門書看一看。市面上有很多優(yōu)秀的Kotlin入門書,學(xué)習(xí)者可以基于自己的編程經(jīng)驗(yàn)及學(xué)習(xí)風(fēng)格去挑選。
如果學(xué)習(xí)者熟悉面向?qū)ο缶幊蹋獽otlin知識(shí)掌握得不牢靠,那么閱讀本書不會(huì)有太大問題。碰到Kotlin知識(shí)點(diǎn),本書會(huì)給出簡(jiǎn)要說明。不過,在學(xué)習(xí)的過程中還是建議手邊準(zhǔn)備一本Kotlin參考書,以便查閱。
第5版有哪些變化
本書第5版于2019年10月發(fā)布,較之前版本有很多改變。
從2019年開始,響應(yīng)式編程作為一種將Android代碼構(gòu)建成可維護(hù)和可擴(kuò)展的結(jié)構(gòu)的編程方法越來越受到歡迎。2021年,隨著Jetpack Compose的發(fā)布,Google公司又加了把火,推進(jìn)了響應(yīng)式編程的進(jìn)程。響應(yīng)式編程和Jetpack Compose的聲明框架無縫結(jié)合,為構(gòu)建現(xiàn)代Android應(yīng)用程序奠定了良好的基礎(chǔ)。
Jetpack Compose是Android開發(fā)的未來,第5版就是為讀者應(yīng)對(duì)將來的編程而準(zhǔn)備的。除向讀者介紹Jetpack Compose的4個(gè)新章節(jié)外,第5版簡(jiǎn)化了從使用Android現(xiàn)有UI工具包開發(fā)應(yīng)用程序到使用Jetpack Compose開發(fā)應(yīng)用程序的過渡。例如,有很多方法可以在Android上編寫異步代碼,但第5版專門使用Kotlin協(xié)程實(shí)現(xiàn)異步操作。作為一款優(yōu)秀的交互式UI工具,協(xié)程是用Android現(xiàn)有UI工具包編寫的,它能夠直接嵌入Jetpack Compose的API中。同時(shí),書中還遵循單向數(shù)據(jù)流架構(gòu)模式重新設(shè)計(jì)了許多項(xiàng)目。單向數(shù)據(jù)流模式對(duì)于使用Jetpack Compose構(gòu)建應(yīng)用程序至關(guān)重要,在使用Android現(xiàn)有的UI工具包構(gòu)建應(yīng)用程序時(shí),也有助于組織代碼。
第5版的另外一些變化是建立在Jetpack Compose之上的。例如,測(cè)試是構(gòu)建現(xiàn)代Android應(yīng)用程序不可或缺的一部分,我們用實(shí)際例子從頭開始重寫了測(cè)試內(nèi)容。此外,為了反映現(xiàn)代Android應(yīng)用程序是如何開發(fā)的,第5版更加依賴Google公司和第三方的庫。第5版中的應(yīng)用程序使用導(dǎo)航組件庫管理屏幕和庫之間的導(dǎo)航,如Retrofit庫、Moshi庫、Coil庫和Jetpack庫,以處理其他核心功能。作為Android開發(fā)人員,每天都在使用這些庫。
對(duì)于本版的第2次印刷作如下說明。我們?cè)诘?章中改正了一些拼寫錯(cuò)誤,包括用于FragmentLayout的inflate()方法的變量名稱。此外,在第17章中,我們將傳遞給17.12節(jié)中createIntent()函數(shù)的一個(gè)參數(shù)從null更改為emptyUri。傳遞null適用于某些版本的Jetpack庫,但在技術(shù)上是不正確的,并且會(huì)導(dǎo)致較新版本的庫崩潰。createIntent()函數(shù)需要一些非null輸入,即使該輸入沒有用于任何功能。
Kotlin與Java
在2017年的Google I/O全球開發(fā)者大會(huì)上Kotlin獲得了Android開發(fā)的官方支持。在那之前,一直是民間Android開發(fā)者力量在推動(dòng)使用Kotlin。自2017年官宣后,Kotlin逐漸被人們廣泛接受, 并迅速成為大多數(shù)開發(fā)者進(jìn)行Android開發(fā)的首選語言。在Big Nerd Ranch,所有的應(yīng)用開發(fā)項(xiàng)目都采用Kotlin,即使是過去那些大量使用Java的遺留項(xiàng)目。
隨著Google官宣,Kotlin已經(jīng)成為現(xiàn)代Android開發(fā)工具箱中最基本的工具。除與現(xiàn)有平臺(tái)兼容外,Android平臺(tái)上現(xiàn)在還有一些工具和功能只能與Kotlin一起使用(包括Jetpack Compose),所以無法在Jetpack Compose中使用Java編寫應(yīng)用程序。
Android框架最初是用Java編寫的,這意味著大多數(shù)與Android交互的類都是Java。而Kotlin可以與Java互操作,所以學(xué)習(xí)者應(yīng)該不會(huì)遇到太大問題。
盡管學(xué)習(xí)者仍然可以用Java編寫應(yīng)用程序,但Android平臺(tái)的未來取決于Kotlin。Google和整個(gè)Android開發(fā)者生態(tài)系統(tǒng)都在大力投資,使Kotlin的開發(fā)在Android上更容易、更有用。
如何使用本書
本書不是一本參考書。這本書的目標(biāo)是幫學(xué)習(xí)者跨越學(xué)習(xí)的初始障礙,進(jìn)而充分利用其他參考資料和實(shí)例類圖書來深入學(xué)習(xí)。本書基于Big Nerd Ranch培訓(xùn)機(jī)構(gòu)的5天教學(xué)課程編寫而成,從基礎(chǔ)知識(shí)講起,各章內(nèi)容循序漸進(jìn),所以建議讀者不要跳讀,以免學(xué)習(xí)效果大打折扣。
以下建議也許很有幫助: 和朋友或同事組成學(xué)習(xí)小組; 集中安排時(shí)間逐章學(xué)習(xí); 參與本書論壇的交流和討論; 向Android開發(fā)高手尋求幫助。
本書內(nèi)容
本書會(huì)帶領(lǐng)學(xué)習(xí)者學(xué)習(xí)開發(fā)6個(gè)Android應(yīng)用。有些應(yīng)用很簡(jiǎn)單,1個(gè)章節(jié)即可講完,有些則相對(duì)復(fù)雜。最復(fù)雜的一個(gè)應(yīng)用跨越了11章。通過這些精心編排的應(yīng)用,學(xué)習(xí)者能學(xué)到很多重要的理論知識(shí)和開發(fā)技巧,并獲得最直接的開發(fā)經(jīng)驗(yàn)。
(1) GeoQuiz是本書中的第一個(gè)應(yīng)用,用來學(xué)習(xí)Android應(yīng)用的基本組成、activity、界面布局和顯式Intent。學(xué)習(xí)者還將學(xué)習(xí)如何無縫處理配置更改。
(2) CriminalIntent是本書最復(fù)雜的應(yīng)用,用來學(xué)習(xí)Fragment、listbacked用戶界面、數(shù)據(jù)庫、菜單、相機(jī)調(diào)用、隱式intent等內(nèi)容。
(3) PhotoGallery是一個(gè)從Flickr公共訂閱網(wǎng)站下載并用于顯示照片的客戶端應(yīng)用,用來學(xué)習(xí)后臺(tái)任務(wù)調(diào)度、多線程、訪問Web服務(wù)等知識(shí)。
(4) DragAndDraw是一個(gè)簡(jiǎn)單的畫圖應(yīng)用,用來學(xué)習(xí)如何處理觸摸手勢(shì)事件,以及如何創(chuàng)建個(gè)性化視圖。
(5) Sunset是一個(gè)漂亮的日落動(dòng)畫應(yīng)用,在開闊的水面上創(chuàng)建一個(gè)美麗的日落動(dòng)畫,用來學(xué)習(xí)Android動(dòng)畫。
(6) Coda Pizza主要用于講解Jetpack Compose,Jetpack Compose是創(chuàng)建Android UI的最新方法。學(xué)習(xí)者將學(xué)習(xí)如何管理應(yīng)用程序狀態(tài),以及如何使用聲明性框架來描述UI的自我呈現(xiàn)。
挑戰(zhàn)練習(xí)
本書大部分章末均配有練習(xí)題,學(xué)習(xí)者可借此機(jī)會(huì)檢驗(yàn)所學(xué),查閱文檔,鍛煉獨(dú)立解決問題的能力。強(qiáng)烈建議學(xué)習(xí)者完成這些挑戰(zhàn)練習(xí)。在練習(xí)過程中不妨嘗試另辟蹊徑,這有助于學(xué)習(xí)者鞏固所學(xué)知識(shí),增強(qiáng)未來開發(fā)應(yīng)用的信心。
深入學(xué)習(xí)
本書部分章末還包含深入學(xué)習(xí)的章節(jié)。該節(jié)對(duì)本章內(nèi)容進(jìn)行了深入講解或提供了更多信息,此部分內(nèi)容不屬于必須掌握的部分,但希望學(xué)習(xí)者有興趣閱讀并有所收獲。
版式說明
所有代碼與XML清單會(huì)以固定寬度字體顯示。需要輸入的代碼或XML總是以粗體顯示。應(yīng)該刪除的代碼或XML會(huì)打上刪除線。例如,在以下代碼里,刪除了Toast.makeText().show()方法的調(diào)用,增加了checkAnswer(true)函數(shù)的調(diào)用。
trueButton.setOnClickListener { view: View-
Toast.makeText(
this,
R.string.correct_toast,
Toast.LENGTH_SHORT
)
.show()
checkAnswer(true)
}
Android版本
本書面向撰寫本書時(shí)廣泛使用的各個(gè)系統(tǒng)版本。就本書第5版來說,就是從Android 7.0 Nougat(N,API level 24)到Android 12L(Sv2,API level 32)。話雖如此,由于Google公司在為Android提供向后兼容的解決方案方面投入了大量資金,本書中的大部分代碼仍然可以在舊版本的Android上運(yùn)行,例如可以支持像Android 5.0 Lollipop (L,API level 21)一樣舊的版本。
雖然舊版本的Android仍有人在用,但對(duì)于許多開發(fā)人員來說,為支持這些舊版本而付出努力將得不償失。第8章介紹了Android的相關(guān)版本以及如何選擇正確的版本。
Android和Android Studio的新版本會(huì)不斷發(fā)布,學(xué)習(xí)者在本書中學(xué)到的技術(shù)不會(huì)過時(shí),感謝Android的向后兼容性支持。我們將持續(xù)跟蹤Android開發(fā)新動(dòng)向,及時(shí)為學(xué)習(xí)者提供本書與最新Android版本的相關(guān)說明和指導(dǎo)。我們也可能在以后的印刷中對(duì)本書做一些小的修改,例如更新屏幕截圖或按鈕名稱。