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