Android开发初体验
搭建 Android Studio 开发环境,创建并运行你的第一个 Android 应用,看懂项目结构中的每一部分。
学习目标
- 能沿“Android开发初体验”的用户事件解释Android组件、状态所有者、线程与销毁边界。
- 能围绕“搭建 Android Studio 开发环境,创建并运行你的第一个 Android 应用,看懂项目结构中的每一部分。”改出一个可运行结果,并用前后状态而非组件数量验收。
- 能在旋转、进程重建、拒权、离线或无效输入中选择适用反例,定位首个状态分叉。
- 能用构建指纹、用户操作、状态快照、原始日志和行为断言独立重放结论,并标明第四版机制与现代targetSdk政策的边界。
你的第一个 Android 应用——从零到跑起来
你以前用的手机 App,背后都是别人写的代码。这一章,你来做那个人——从下载工具、点几下按钮,到自己的手机上弹出一个新界面,全程不超过一小时。
这件事的核心是一条工厂流水线:你写 Kotlin 代码和 XML 布局(原料),经过一道叫 Gradle 的工位把所有东西打包压缩,最后输出一个叫 ↡Android Package,Android 应用的安装包文件,本质是一个 zip 压缩包,里面装着编译好的代码、资源文件、清单文件等所有应用运行需要的东西。 的成品。把这个 APK 装进手机,点一下图标,你就看到了自己写的界面。
没有这条流水线会怎样?你写的几百行 Kotlin 代码永远只是一堆纯文本文件,手机一个字也不认识。这一章的每一节都在帮你把这条流水线走通一遍。
那条流水线的"成品"——APK——到底装了什么?把它剖开看一眼:
概念讲解
Android Studio:你的工作台
↡Google 官方提供的 Android 应用集成开发环境(IDE),基于 IntelliJ IDEA,内置了代码编辑器、模拟器、调试器、性能分析工具等所有开发 Android 应用需要的工具。 是你写 Android 应用的"主战场"。它集成了代码编辑器、模拟器、调试工具和 Gradle 构建系统——你不需要单独安装任何其他东西就能完整地开发、运行、调试一个 Android 应用。
下载安装 Android Studio 后,第一次启动会让你下载 Android SDK——这是一套包含 Android 各个版本系统镜像、开发工具的命令行工具集。从 Android Studio 官网下载最新稳定版即可,安装向导会自动帮你把 SDK 配好。
项目结构:三间房各管什么事
创建新项目时选"Empty Views Activity",你会得到一个叫 app 的模块。打开左侧项目面板,把视图从 Android 切换到 Project,你会看到一个标准 Gradle 项目的完整目录树。核心的三个目录:
app/
├── manifests/
│ └── AndroidManifest.xml ← 应用的"身份证"
├── java/
│ └── com.example.myapp/
│ └── MainActivity.kt ← 你的 Kotlin 代码
└── res/
├── layout/
│ └── activity_main.xml ← 界面的样子
├── values/
│ ├── strings.xml ← 文字资源
│ └── colors.xml ← 颜色资源
└── drawable/ ← 图片资源
manifests/ 里放的是 ↡每个 Android 应用必须包含的 XML 清单文件,向系统声明应用包含哪些组件(Activity、Service 等)、需要哪些权限、支持哪些设备特性。系统在安装应用前会先读这个文件。——应用的"身份证"。它告诉 Android 系统:这个应用叫什么名字、图标是哪个、里面有哪些界面(Activity)、需要哪些权限(比如联网、拍照)。
java/(或 kotlin/)放你的 Kotlin 源代码。每个界面通常对应一个 ↡Android 四大组件之一,代表一个用户可以交互的屏幕。每个 Activity 负责一个界面,管理界面的创建、显示和用户交互。可以理解为应用中一个「页面」 类——MainActivity 就是你应用的第一个界面。
res/ 是资源目录。layout/ 里放布局 XML 文件,定义界面上按钮、文字摆在哪里、长什么样;values/ 里放字符串、颜色等常量;drawable/ 里放图片。这种把代码和资源分开管理的方式是 Android 的核心设计理念之一。
Gradle:流水线的工位
你点"Run"按钮之后,背后真正干活的是 ↡Android 官方使用的自动化构建工具,负责把 Kotlin/Java 源码编译成字节码、再转换成 DEX 格式、打包资源文件、最终生成 APK。构建规则写在 build.gradle 文件里。。它是把源码变成 APK 的自动化流水线:
- 编译:把 Kotlin 代码编译成 Java 字节码(
.class),再转成 Android 专用的 DEX 格式(.dex) - 打包:把 DEX 文件 + 编译后的资源 + AndroidManifest.xml 等打成一个未签名的 APK
- 签名:给 APK 加上数字签名(debug 模式下 Android Studio 自动用 debug 签名)
- 安装:通过 adb 把 APK 推送到模拟器或真机上安装
第 1 / 7 步 · 源码:你写的 Kotlin / Java 文件,是这条流水线的原料
点击播放,看 Gradle 把源码逐工位加工成 APK;可暂停、单步、拖进度逐帧观察。
Gradle 的配置写在 build.gradle 文件里。你有两个:项目根目录的(全局配置)和 app/ 目录下的(当前模块配置)。app/build.gradle 里最重要的几项:
android {
namespace = "com.example.myapp"
compileSdk = 35
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 24
targetSdk = 35
versionCode = 1
versionName = "1.0"
}
}
dependencies {
implementation("androidx.core:core-ktx:1.15.0")
// ... 你的第三方库写在这里
}applicationId 是应用的全球唯一标识,minSdk 是最低支持的 Android 版本,dependencies 里列出你依赖的第三方库。
动手:走通你的第一条流水线
下面创建一个新项目并运行它。每一步都配合实际操作。
猜一猜:点 Run 到手机上弹出界面,中间最快的步骤是哪一步?最慢的呢?做完下面全流程再看答案。
① 创建新项目
打开 Android Studio → New Project → 选 "Empty Views Activity" → Next。 在配置页填好:Name = "MyFirstApp",Package name = "com.example.myfirstapp"(保持默认即可),Language = Kotlin,Minimum SDK = API 24。 点 Finish,等待 Gradle 同步完成(底部状态栏显示 "Gradle sync finished")。
代码逐段拆解
MainActivity.kt:界面的大脑
package com.example.myfirstapp
import { Term } from "@/components/mdx/term";
import { Glossary, GlossaryItem } from "@/components/mdx/glossary";
import { Objectives } from "@/components/mdx/objectives";
import { ApkAnatomyDiagram } from "@/components/mdx/diagrams/apk-anatomy-diagram";
import { AndroidProjectStructureDiagram } from "@/components/mdx/diagrams/android-project-structure-diagram";
import { GradleBuildPipelineDiagram } from "@/components/mdx/diagrams/gradle-build-pipeline-diagram";
import { Step, Stepper } from "@/components/mdx/stepper";
import { Callout } from "@/components/mdx/callout";
import { Answer, Exercises } from "@/components/mdx/exercises";
import { Attribution } from "@/components/mdx/attribution";
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}逐行看:package 声明这个文件属于哪个包——和你在创建项目时填的包名一致。import 导入需要用到的类,AppCompatActivity 是 Android 官方兼容库提供的一个基类(兼容老版本 Android)。class MainActivity : AppCompatActivity() 声明你的 MainActivity 继承自 AppCompatActivity——继承了它所有现成的功能,你只需要重写(override)你需要改的部分。
onCreate(savedInstanceState: Bundle?) 是 Activity 生命周期的第一个回调——系统创建你的界面时首先调它。super.onCreate(savedInstanceState) 先让父类把该做的初始化做了(这条必须放第一行),然后 setContentView(R.layout.activity_main) 把你写的布局 XML 加载进来,变成屏幕上可见的按钮和文字。
R.layout.activity_main 里的 R 是 Android 自动生成的一个类——你放进 res/ 的每一个资源,Gradle 都会在 R 里生成一个对应的整数 ID,你的 Kotlin 代码通过这些 ID 来引用资源。
activity_main.xml:界面的骨架
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>ConstraintLayout 是一种布局容器——它里面可以放各种控件(按钮、文字、图片),并通过"约束"来控制它们的位置。android:layout_width="match_parent" 意思是宽度撑满整个父容器(这里是屏幕)。TextView 是显示文字的控件,wrap_content 意思是"内容的尺寸多大我就多大"——文字有多宽,控件就多宽。
四个 app:layout_constraint... 属性把 TextView 的上下左右都约束在父容器中央——效果就是文字居中显示。
小结
- Android Studio + Gradle 构成一条自动化流水线:源码 → 编译 → DEX 转换 → 打包 → 签名 → APK
- 项目三间房:
manifests/是身份证,java/是代码,res/是资源——三个分开管理 MainActivity.onCreate()是应用的入口,setContentView()把布局加载到屏幕R.layout.activity_main是布局文件的 ID,Gradle 自动生成的R类管理所有资源引用- 模拟器需要单独创建;首次运行 Gradle 较慢是正常现象
练习
问题 1:“第1章 Your First Android Application”覆盖哪些正式节点和项目主线?
问题 2:怎样建立本页最小可执行实验?
问题 3:为什么只在正常点击路径运行不能证明完成?
问题 4:怎样设计能推翻当前实现的反例?
问题 5:从第4版语境迁移到现代目标SDK时如何控制变量?
问题 6:本页达到独立交接标准需要什么?
名词解释
本章出现的专业名词,用大白话再讲一遍。
- APK
Android 应用的安装包文件,本质是一个 zip 压缩包。里面装着编译好的 .dex 字节码文件、res 目录下的所有资源、AndroidManifest.xml 清单文件、以及签名信息。把 APK 传进手机点安装,你的应用就出现在桌面上了。详见本章"你的第一个 Android 应用"一节。
- Android Studio
Google 官方提供的 Android 集成开发环境,基于 JetBrains IntelliJ IDEA。集成了代码编辑、模拟器管理、Gradle 构建、Logcat 日志查看、Profiler 性能分析等所有开发必需的模块。免费下载使用。详见本章"Android Studio:你的工作台"一节。
- AndroidManifest.xml
每个 Android 应用根目录下必须有的 XML 清单文件。它向 Android 系统声明:应用里有哪些组件(Activity、Service 等)、需要哪些权限(联网、相机等)、支持哪些设备特性、最低和目标 SDK 版本。系统在安装 APK 前会先解析这个文件。详见本章"项目结构"一节。
- Activity
Android 四大应用组件之一,代表一个用户可以交互的屏幕。每一个界面(登录页、设置页、聊天列表等)都是一个 Activity。它管理界面的生命周期(创建→可见→暂停→销毁),处理用户输入。详见本章"MainActivity 与布局文件"一节。
- Gradle
Android 官方使用的自动化构建工具。你点 Run 之后,Gradle 依次执行:编译 Kotlin → 转 DEX 字节码 → 打包资源和代码 → 签名 → 生成 APK。构建规则写在 build.gradle(Kotlin DSL)文件里。详见本章"Gradle:流水线的工位"一节。
“Android开发初体验”不使用未获授权的纸书正文;InformIT出版信息与授权电子版完整目录只用于确认第四版32章、269个正式目录节点和时代语境,第四版官方勘误用于识别工具链变更。下列中文解释、图示、交互、代码与练习均为独立教学重写,平台行为再以Android Developers的一手文档复核。
为什么“Android开发初体验”必须回到可观察状态
“Android开发初体验”的学习结果不是记住类名,而是能预测“搭建 Android Studio 开发环境,创建并运行你的第一个 Android 应用,看懂项目结构中的每一部分。”在一次输入、一次重建和一次失败中的不同状态,并指出哪条Android合同产生差异。
第四版机制逐项深读
1. Your First Android Application
在“Android开发初体验”中,“1. Your First Android Application”把源码、资源、清单和Gradle配置变成可安装APK;验证要从干净构建开始,保存variant、SDK、依赖与安装后的首帧,而不是只看IDE绿色三角。
App Basics
在“Android开发初体验”中,验证“App Basics”只改变一个生命周期或外部条件,保存操作、原始日志、状态快照和用户可见断言。
Creating an Android Project
在“Android开发初体验”中,“Creating an Android Project”把源码、资源、清单和Gradle配置变成可安装APK;验证要从干净构建开始,保存variant、SDK、依赖与安装后的首帧,而不是只看IDE绿色三角。
Navigating in Android Studio
在“Android开发初体验”中,“Navigating in Android Studio”把源码、资源、清单和Gradle配置变成可安装APK;验证要从干净构建开始,保存variant、SDK、依赖与安装后的首帧,而不是只看IDE绿色三角。
Laying Out the UI
在“Android开发初体验”中,“Laying Out the UI”若依赖第四版时期API,应分开说明原书机制与现代平台政策,并用Android官方文档核对迁移边界。
From Layout XML to View Objects
在“Android开发初体验”中,“From Layout XML to View Objects”的视觉正确性必须与语义树一致;看得见但读屏无名称、焦点不可达或点击区过小仍判失败。
Wiring Up Widgets
在“Android开发初体验”中,“Wiring Up Widgets”把约束、测量与布局落实为View树几何;用小屏、长文本与大字体验证,不能用单一模拟器截图证明适配。
Making Toasts
在“Android开发初体验”中,分析“Making Toasts”先冻结设备API、targetSdk和输入,再沿回调与数据流寻找首个状态分叉,不能只描述最终页面。
Running on the Emulator
在“Android开发初体验”中,“Running on the Emulator”服务于“搭建 Android Studio 开发环境,创建并运行你的第一个 Android 应用,看懂项目结构中的每一部分。”;解释要落到用户事件、Android所有者、状态变化、线程和可观察结果,并给出一个会推翻实现的反例。
For the More Curious: The Android Build Process
在“Android开发初体验”中,“For the More Curious: The Android Build Process”把源码、资源、清单和Gradle配置变成可安装APK;验证要从干净构建开始,保存variant、SDK、依赖与安装后的首帧,而不是只看IDE绿色三角。
Challenges
在“Android开发初体验”中,“Challenges”用于推翻“搭建 Android Studio 开发环境,创建并运行你的第一个 Android 应用,看懂项目结构中的每一部分。”的顺利路径:先写预期,再引入一个边界输入、重建或平台差异,并用状态、日志与用户结果解释首个分叉。
Challenge: Customizing the Toast
在“Android开发初体验”中,“Challenge: Customizing the Toast”用于推翻“搭建 Android Studio 开发环境,创建并运行你的第一个 Android 应用,看懂项目结构中的每一部分。”的顺利路径:先写预期,再引入一个边界输入、重建或平台差异,并用状态、日志与用户结果解释首个分叉。
“Android开发初体验”验收回顾
“Android开发初体验”只有在构建指纹、用户操作、状态快照、原始日志和行为断言能够从相同基线再次得到相同断言时才通过;第四版机制与现代平台政策分别记录,不用新API名称掩盖旧行为。
← 上一页:《Android Programming: The Big Nerd Ranch Guide(第4版)》权威学习地图 · 下一页:Android与MVC设计模式 →