对于新手来说,一开始学习Android开发会感觉很难。就像初次踏入异国他乡一样,即使会说当地语言,一开始也绝不会有舒服自在的感觉。学习者不能理解周围人习以为常的东西,其原有的知识储备在新环境下也完全派不上用场。
Android有自己使用的编程语言Kotlin或Java语言(或者两者兼而有之)。但要深入理解Android,仅掌握Kotlin或Java还不够,学习者还需要学习诸多新理论和新技术。涉足陌生领域时,有个向导会很有帮助,这就是本书的作用所在。
在Big Nerd Ranch,要成为一名Android开发人员,学习者必须:
充分理解Android应用;
着手开发一些Android应用。
本书将协助学习者完成以上两件事,将指导学习者开发多个Android应用,并根据需要介绍各种概念和技术。我们会尽最大努力抽丝剥茧,让学习者知其然更知其所以然。在学习过程中,如果遇到知识疑难点,请勇敢面对。
本书秉承的教学方法是: 在学习理论的同时就着手运用它们开发实际应用,而非先学习一大堆理论,再考虑如何将其应用于实践。读完本书,学习者将具备必要的开发经验和知识。以此为起点,深入学习,学习者会逐渐成长为一名合格的Android开发者。
阅读前提
使用本书的一个重要前提是学习者熟悉Kotlin语言,包括类、对象、接口、监听器、包、内部类、对象表达式以及泛型类等基本概念。如果不熟悉这些概念,可能没翻几页就会看不下去本书了。对此,建议先放下本书,找本Kotlin入门书看一看。市面上有很多优秀的Kotlin入门书,学习者可以基于自己的编程经验及学习风格去挑选。
如果学习者熟悉面向对象编程,但Kotlin知识掌握得不牢靠,那么阅读本书不会有太大问题。碰到Kotlin知识点,本书会给出简要说明。不过,在学习的过程中还是建议手边准备一本Kotlin参考书,以便查阅。
第5版有哪些变化
本书第5版于2019年10月发布,较之前版本有很多改变。
从2019年开始,响应式编程作为一种将Android代码构建成可维护和可扩展的结构的编程方法越来越受到欢迎。2021年,随着Jetpack Compose的发布,Google公司又加了把火,推进了响应式编程的进程。响应式编程和Jetpack Compose的声明框架无缝结合,为构建现代Android应用程序奠定了良好的基础。
Jetpack Compose是Android开发的未来,第5版就是为读者应对将来的编程而准备的。除向读者介绍Jetpack Compose的4个新章节外,第5版简化了从使用Android现有UI工具包开发应用程序到使用Jetpack Compose开发应用程序的过渡。例如,有很多方法可以在Android上编写异步代码,但第5版专门使用Kotlin协程实现异步操作。作为一款优秀的交互式UI工具,协程是用Android现有UI工具包编写的,它能够直接嵌入Jetpack Compose的API中。同时,书中还遵循单向数据流架构模式重新设计了许多项目。单向数据流模式对于使用Jetpack Compose构建应用程序至关重要,在使用Android现有的UI工具包构建应用程序时,也有助于组织代码。
第5版的另外一些变化是建立在Jetpack Compose之上的。例如,测试是构建现代Android应用程序不可或缺的一部分,我们用实际例子从头开始重写了测试内容。此外,为了反映现代Android应用程序是如何开发的,第5版更加依赖Google公司和第三方的库。第5版中的应用程序使用导航组件库管理屏幕和库之间的导航,如Retrofit库、Moshi库、Coil库和Jetpack库,以处理其他核心功能。作为Android开发人员,每天都在使用这些库。
对于本版的第2次印刷作如下说明。我们在第9章中改正了一些拼写错误,包括用于FragmentLayout的inflate()方法的变量名称。此外,在第17章中,我们将传递给17.12节中createIntent()函数的一个参数从null更改为emptyUri。传递null适用于某些版本的Jetpack库,但在技术上是不正确的,并且会导致较新版本的库崩溃。createIntent()函数需要一些非null输入,即使该输入没有用于任何功能。
Kotlin与Java
在2017年的Google I/O全球开发者大会上Kotlin获得了Android开发的官方支持。在那之前,一直是民间Android开发者力量在推动使用Kotlin。自2017年官宣后,Kotlin逐渐被人们广泛接受, 并迅速成为大多数开发者进行Android开发的首选语言。在Big Nerd Ranch,所有的应用开发项目都采用Kotlin,即使是过去那些大量使用Java的遗留项目。
随着Google官宣,Kotlin已经成为现代Android开发工具箱中最基本的工具。除与现有平台兼容外,Android平台上现在还有一些工具和功能只能与Kotlin一起使用(包括Jetpack Compose),所以无法在Jetpack Compose中使用Java编写应用程序。
Android框架最初是用Java编写的,这意味着大多数与Android交互的类都是Java。而Kotlin可以与Java互操作,所以学习者应该不会遇到太大问题。
尽管学习者仍然可以用Java编写应用程序,但Android平台的未来取决于Kotlin。Google和整个Android开发者生态系统都在大力投资,使Kotlin的开发在Android上更容易、更有用。
如何使用本书
本书不是一本参考书。这本书的目标是帮学习者跨越学习的初始障碍,进而充分利用其他参考资料和实例类图书来深入学习。本书基于Big Nerd Ranch培训机构的5天教学课程编写而成,从基础知识讲起,各章内容循序渐进,所以建议读者不要跳读,以免学习效果大打折扣。
以下建议也许很有帮助: 和朋友或同事组成学习小组; 集中安排时间逐章学习; 参与本书论坛的交流和讨论; 向Android开发高手寻求帮助。
本书内容
本书会带领学习者学习开发6个Android应用。有些应用很简单,1个章节即可讲完,有些则相对复杂。最复杂的一个应用跨越了11章。通过这些精心编排的应用,学习者能学到很多重要的理论知识和开发技巧,并获得最直接的开发经验。
(1) GeoQuiz是本书中的第一个应用,用来学习Android应用的基本组成、activity、界面布局和显式Intent。学习者还将学习如何无缝处理配置更改。
(2) CriminalIntent是本书最复杂的应用,用来学习Fragment、listbacked用户界面、数据库、菜单、相机调用、隐式intent等内容。
(3) PhotoGallery是一个从Flickr公共订阅网站下载并用于显示照片的客户端应用,用来学习后台任务调度、多线程、访问Web服务等知识。
(4) DragAndDraw是一个简单的画图应用,用来学习如何处理触摸手势事件,以及如何创建个性化视图。
(5) Sunset是一个漂亮的日落动画应用,在开阔的水面上创建一个美丽的日落动画,用来学习Android动画。
(6) Coda Pizza主要用于讲解Jetpack Compose,Jetpack Compose是创建Android UI的最新方法。学习者将学习如何管理应用程序状态,以及如何使用声明性框架来描述UI的自我呈现。
挑战练习
本书大部分章末均配有练习题,学习者可借此机会检验所学,查阅文档,锻炼独立解决问题的能力。强烈建议学习者完成这些挑战练习。在练习过程中不妨尝试另辟蹊径,这有助于学习者巩固所学知识,增强未来开发应用的信心。
深入学习
本书部分章末还包含深入学习的章节。该节对本章内容进行了深入讲解或提供了更多信息,此部分内容不属于必须掌握的部分,但希望学习者有兴趣阅读并有所收获。
版式说明
所有代码与XML清单会以固定宽度字体显示。需要输入的代码或XML总是以粗体显示。应该删除的代码或XML会打上删除线。例如,在以下代码里,删除了Toast.makeText().show()方法的调用,增加了checkAnswer(true)函数的调用。
trueButton.setOnClickListener { view: View-
Toast.makeText(
this,
R.string.correct_toast,
Toast.LENGTH_SHORT
)
.show()
checkAnswer(true)
}
Android版本
本书面向撰写本书时广泛使用的各个系统版本。就本书第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仍有人在用,但对于许多开发人员来说,为支持这些旧版本而付出努力将得不偿失。第8章介绍了Android的相关版本以及如何选择正确的版本。
Android和Android Studio的新版本会不断发布,学习者在本书中学到的技术不会过时,感谢Android的向后兼容性支持。我们将持续跟踪Android开发新动向,及时为学习者提供本书与最新Android版本的相关说明和指导。我们也可能在以后的印刷中对本书做一些小的修改,例如更新屏幕截图或按钮名称。