从零开始的 Android 开发

时间:2024-03-27 11:50:24

0、简介

0.1 个人情况

先说一说自己的情况吧。湖南大学本科学生,因为对 Android 开发感兴趣,所以先学习了 Java (教材是 《疯狂 Java 讲义》,这本书非常好),之后又开始按照 郭霖先生的 《第一行代码 (第二版)》 学习 Android 开发。
《疯狂 Java 讲义》我没有全部学完,只是学习了有关 Java 语法的部分,后面的有关 Java 窗体编程的内容 (包括网络编程)我都没有看(之后有需要会回去学习)。不过我想熟练掌握 Java 语法应该是对 Android 开发很有帮助的。
所以,本文会实现真正长期更新
我的 GitHub

0.2 现状

现状是,自己平时事情挺多,断断续续学了一内容,觉得自己会了一点就迫不及待地去尝试,也写了一点文章放到了 CSDN 上,可以看看我发布的其他那些文章。 对于自己感兴趣的技术总是想去尝试,看了很多技术文章,自己会说很多名词 却从来没有深入研究过某一项技术 ,思来想去之后我觉得 自己喜欢 Android,还是实事求是,做好这一个技术活儿,能系统地掌握 Android 开发的有关知识,这是我真正要做的事情。

0.3 展望

这篇博客将会是我真正 从 0 开始 的一篇博客,也就是说,我准备从 0 开始学习安卓了,一步一步来。学习路线遵从《第一行代码 (第二版)》,如果我能坚持到最后,希望可以做出一个真正的应用出来,不过眼下打好基础是最关键的。
有时候也会穿插自己学到的其他的一些关于 Android 的技术,总的来说《第一行代码》算是一门基础入门书,我也不可能直接复制书中的内容作为我的博客内容。
学习资源是很多的,但是最重要的是坚持学下去。

0.4 一些问题 (为什么要写这篇文章 / IDE / 编程语言 / 最低 SDK 版本 / 电脑配置 / 版权)

为什么要写这篇文章?在最开始写这篇文章的时候,第三行代码(误) 已经要出来了(《第一行代码(第三版)》),而这是一本 Kotlin 写成的教程,但是我觉得 Java 始终会是强力的 Android 开发语言,在开发商用的 Android 应用时,我觉得 Kotlin 暂时还不会有替代 Java 的实力,Kotlin 开发者也指出 Kotlin 不是要替代 Java,而是一些新功能可以采用 Kotlin 开发的,但是目前我还是比较菜,所以用 Java。但是第二版确实有一些内容是过时的,所以我有了这样的想法。
我预想读者和我一样比较年轻,有按照第二版来学习碰到了一些问题比较迷茫,想在网上找教程但是找不到很有针对性的内容的惨痛经历,本文绝对不会是书本的原文复制,我的最主要目标就是有过这种惨痛经历的同学。。。
关于 IDE,练习 Java 的时候,一开始我用的是记事本,后来用了 IDEA (主要是考虑到编译运行比较简单,我把代码提示补全功能都关闭了)。觉得 Java 基础算是有了之后,我使用 Android Studio 用于 Android 开发。目前使用的是 Android Studio Version 3.5.3,这是比较新的一个版本,我也注意到,很多第二版教材中介绍的 IDE 操作方法,用这一版本的IDE 会有一些改变,当然 IDE 开发是次要的,有一些关于功能实现的方法也发生了变化,碰到了这种情况会有说明的。
我同时也学习了很多关于 Kotlin 的语法,Kotlin 目前已经成为 Android 开发第一语言,但是因为 Kotlin 的很多实现都借助了 Java,Java 已经形成了良好的生态,关于 Java 的知识显然是一个 Android 程序员必须要熟练掌握的,并且语言只是工具,我也不想在这上面花很多时间选择,因此 这篇文章主体将采用 Java 语言,事实上 因为我自己对 Android 绝对称不上是掌握,我想先通过 Java 学习好 Android 之后,再考虑将 Kotlin 添加到项目中实践。 之后肯定会有一个应用,全部采用 Kotlin 实现,作为一种练习(预想)。

关于 SDK 版本,实际上一些操作的无效与这个是有关的,为了增强自己的程序的适配性,我使用的最低版本的 SDK 是 API 14,相当于是 Android 4.0,这意味着我的程序几乎能够运行在 100% 的 Android 移动设备上,注意是移动设备,我这里的 Android 开发是手机端开发。
如果有些内容太长,会新开一篇文章,将链接放在本文。
如果你愿意长期支持这篇文章,我希望你阅读时准备好一本纸质的《第一行代码(第二版)》,这篇博客中目前大部分内容肯定还是会基于书中的内容,有了书本自己学习也会更加方便。

接下来是电脑的配置,结合我自己的惨痛经历,用笔记本电脑进行开发的话(估计很多大学生都会用笔记本电脑做开发吧),8G 内存是不够用的,要运行虚拟设备的话(这几乎是肯定的,基本不可能摆上一堆实体设备去测试),最少要 16G,当然 16G 已经可以满足基本要求了,至少我在之前折腾的过程中,绝对够用了。
本文不赢利、不做广告,介绍郭霖先生书中的内容来学习 Android,是出于技术交流和自我提升的目的,如果有侵权请联系邮箱 [email protected],我会及时删除侵权内容。如果你愿意支持这篇文章,请购买 《第一行代码(第二版)》!本文同时也禁止复制转载,但是欢迎分享文章链接。同时文章也不接受打赏,如果喜欢请支持郭神的作品!如果我的文章能帮助到你理解教材,那是再好不过了。
还有一点,在这篇文章中我大部分时候会将第二行代码称为教材

说了这么多,让我们开始吧。

0.5 日志

标签说明:Ini 初始提交 Upd 内容更新 Fix 内容修正
例如 Upd 手动创建活动.
----------------------------------------------------------------------
2020-2-15 #0 Ini 创建文章
2020-2-15 #1 Fix 修正文字错误
2020-2-15 #2 Ini 增添内容(至 2.0.2)

1、关于 Android

Android 是一套操作系统,可以运行在移动设备、电视、手表等各种电子产品上。不过我们最熟悉的应该是 Android 手机。

1.1 Android 系统架构

Linux 内核层 → 系统运行库层 → 应用框架层 → 应用层
其中前两个层次属于比较底层的东西,现在我还没有涉及这样的境界;第三层应用框架层,它提供了 Android 的 API,简单来说就是各种各样的类和相关组件,利用这些我们就可以实现一个 Android 应用;最后一层是应用层,这一层就属于我们开发的各种各样的应用。

1.2 Android 四大组件

Android 四大组件是 活动 (Activity)、服务 (Service)、广播接收器 (Broadcast Receiver) 和内容提供器 (Content Provider)。
其中活动应该是用户关注的一块,因为在 Android 应用中所有看得到的东西都属于活动。服务相比于活动来说则不显眼,因为服务一般不在前台运行,用户无法看到它,但是它会在应用退出之后依然活动,执行一些功能;利用广播接收器可以接收来自各处的广播消息,比如手机短信,我们的应用也可以自行发出广播;内容提供器则使不同应用间的数据交互成为可能,比如从应用中读取手机联系人的功能,就需要依靠内容提供器实现。

1.3 其他部分

Android 也提供了数据库(SQLite)和系统控件,我们也可以自己定义控件,数据库用于数据的持久化,保证我们在退出应用之后数据不会丢失,还有其他一些功能等。

2、Android 基础

2.0 活动

2.0.1 使用 Android Studio 创建第一个项目

我假设您已经通过教材掌握了如何安装新版 Android Studio,鼓捣好了各种配置,能够运行 Java、有 Java 基础,那就可以继续往下看了。
新版 Android Studio 界面如下。
从零开始的 Android 开发

选择 创建新 AS 项目,跳转到选择项目类型,选择 空活动从零开始的 Android 开发
之后会选项目名称和保存位置,名称保持默认,保存位置自己选好,Minimum API level 选择 Android 4.0,这样我们的应用可以运行到几乎 100% 的设备上。其他设置保持默认。
点击 Finish 完成创建,接着页面会进行跳转,等待一会(这里又要吐槽,sync 过程中下载各种各样的包等等有时候会比较慢,具体的解决对策这里就不说了)即可完成了。完成了之后界面如下。默认的界面展示的是 MainActivity.java 的代码。
从零开始的 Android 开发
可以看到这里导入了 androidx 的一个包,这是之前所没有的,androidx 中提出了很多新特性,之后会有介绍。总之界面已经和之前的代码不一样了,但是不要惊慌。不要学我。
看布局文件,布局文件默认是 activity_main.xml,之前也没有看到设置布局类型的选项,这里提供的布局是一个看上去很复杂的 ConstraintLayout,暂时我不知道怎么用它,把它替换成 LinearLayout,删除一些看上去没必要的属性,加上一些必要的属性如下(保持文本居中对齐):
从零开始的 Android 开发
运行一下程序就可以看到 Hello World 出现在了屏幕的居中位置。

2.0.2 活动的基本用法

关于手动创建活动、注册主活动、使用 Toast 和 Menu 我没有发现有大的问题,但是我强烈建议各位敲一敲代码,最好关掉自动补全,以便记住这些基本的知识。看起来一个一个字符敲很傻一点也不像那些酷酷的程序员,但是这种办法绝对是有好处的,这也算是我在大学里面学到的一点经验。
有一个问题是,AndroidManifest.xml 文件中会出现大面积的警告,可以不用理会,这提示你的应用无法被 Google Search 检索。
从零开始的 Android 开发
接下来是我认为相当重要也很基础的 使用 intent 在活动中穿梭 的内容,之前我学习的时候虽然觉得自己掌握了,但是关于活动中数据的传输我是很有问题的,比如,如何从一个活动返回图片等特殊数据给前一个活动?我预想是,主活动跳转到用于个人信息编辑的的一个活动,设置好了照片、姓名等信息后,返回主活动后主活动要能够展示出这些信息,怎么做呢?我是否应该把它存入数据库,其他活动再从数据库中取?说实话我也不太清楚,现在还在尝试中。