CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Android 开发入门/课时/Android 开发概览
RawBlame
课时目录12 节

Android 开发入门

  1. 01Android 开发概览
  2. 02四大组件
  3. 03传统 View UI
  4. 04Jetpack Compose
  5. 05架构模式
  6. 06依赖注入
  7. 07本地存储
  8. 08网络层
  9. 09异步与响应式
  10. 10Firebase 生态
  11. 11测试与质量
  12. 12综合练习

Android 开发概览

Kotlin、Gradle 与 Hello World。

30 分钟

Android 开发概览

这一课你将能做到

  1. 说清楚 Android 平台架构的四层模型,以及每层与 Web 前端的对应关系
  2. 在 Android Studio 中创建并运行一个 Hello World 项目,理解 Gradle 构建流程
  3. 对比 Kotlin 与 Java 在 Android 开发中的差异,并说出为什么 Kotlin 是官方首选

为什么要学

Android 占据全球移动设备 70% 以上的份额,而 Kotlin 自 2019 年起就是 Google 官方推荐的 Android 开发语言。对于已经熟悉 Web 前端(React/Next.js)的开发者来说,Android 开发是「同一份编程思维,不同 runtime 和 UI 范式」的扩展。

人话:你会写 React 组件,就会写 Compose 函数;你会管理前端状态,就会管理 Android 的 UI State。区别只在于:Web 跑在浏览器里,Android 跑在 Linux 内核 + ART 虚拟机上;Web 用 HTML/CSS 描述界面,Android 用 Kotlin 代码直接声明。

面试中,「Android 平台架构」和「Kotlin vs Java」是必考题,答不好直接挂。

先建立图像

┌─────────────────────────────────────┐
│  应用层 (System Apps + 你的 App)      │  ← 你写的代码在这里
├─────────────────────────────────────┤
│  应用框架层 (Java API Framework)      │  ← Activity/Service/View 等
├─────────────────────────────────────┤
│  运行时 + 原生库 (ART + C/C++ libs)  │  ← ART 替代了 JVM
├─────────────────────────────────────┤
│  Linux 内核 (驱动/安全/内存管理)       │  ← 和服务器 Linux 同源
└─────────────────────────────────────┘

Web 前端对比:

  • 浏览器 ≈ Android Runtime (ART)
  • DOM ≈ View 树 / Compose 树
  • HTTP 请求 ≈ Retrofit/OkHttp 调用
  • localStorage ≈ DataStore / Room

跟着做

步骤 1:安装 Android Studio 并创建项目

下载 Android Studio( Hedgehog 或更新版本),安装时勾选 Android SDK 和 Emulator。打开后选择 New Project → Empty Activity(Compose 版本),语言选 Kotlin,Minimum SDK 选 API 24(Android 7.0,覆盖 95%+ 设备)。

项目创建后,等待 Gradle 同步完成。Gradle 是 Android 的构建工具,相当于 Web 前端的 npm + webpack 合体。

步骤 2:理解项目结构

app/
├── src/
│   ├── main/
│   │   ├── java/com/example/myapp/    ← Kotlin 源码
│   │   ├── res/                       ← 资源(图片、字符串、布局)
│   │   └── AndroidManifest.xml        ← 应用清单,声明组件和权限
│   └── build.gradle.kts               ← 模块级构建脚本
├── build.gradle.kts                   ← 项目级构建脚本
└── settings.gradle.kts                ← 模块注册

AndroidManifest.xml 是 Android 独有的概念,相当于 Web 应用的 index.html + manifest.json 合体,声明了应用入口、所需权限、支持的屏幕方向等。

步骤 3:运行第一个 Compose 应用

打开 MainActivity.kt,默认代码如下:

package com.example.myapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyAppTheme {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    Greeting("Android")
                }
            }
        }
    }
}

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Text(
        text = "Hello $name!",
        modifier = modifier
    )
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    MyAppTheme {
        Greeting("Android")
    }
}

点击运行按钮(绿色三角),选择模拟器或真机,应用就会编译并安装。setContent 是 Compose 的入口,相当于 React 的 ReactDOM.render。

步骤 4:写一个带交互的计数器

把 Greeting 替换为:

@Composable
fun CounterScreen(modifier: Modifier = Modifier) {
    var count by remember { mutableStateOf(0) }
    
    Column(
        modifier = modifier.fillMaxSize(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text(
            text = "点击次数: $count",
            style = MaterialTheme.typography.headlineMedium
        )
        Spacer(modifier = Modifier.height(16.dp))
        Button(onClick = { count++ }) {
            Text("点我 +1")
        }
    }
}

需要导入:

import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.unit.dp

在 MainActivity.onCreate 中调用 CounterScreen()。点击按钮,数字会实时更新。这就是 Compose 的声明式 UI:状态变了,UI 自动重组。

步骤 5:对比 Kotlin 与 Java

Kotlin 与 Java 100% 互操作,但写法更简洁:

// Java: 需要 20 行的 POJO
data class User(val name: String, val age: Int)

// Java: 需要匿名内部类
button.setOnClickListener { println("clicked") }

// Java: 需要 Handler 或 RxJava
lifecycleScope.launch {
    val data = repository.fetch()
    _uiState.value = data
}

Kotlin 的空安全(?. 和 !!)、扩展函数、协程,都是为 Android 场景量身设计的。

讲清楚要点

  1. Android 不是 JVM,是 ART:Android Runtime 使用 AOT(Ahead-of-Time)编译,安装时就把字节码编译成机器码,比 JVM 的 JIT 更省启动时间。但开发时仍然写 Kotlin/Java,编译成 DEX 字节码。

  2. Gradle 是构建核心:build.gradle.kts 里声明依赖、编译配置、签名。Sync 失败 90% 是网络问题,配好代理或镜像源即可。

  3. Compose 是声明式,View 是命令式:传统 View 需要 findViewById 然后 setText,Compose 直接描述「UI 应该长什么样」,框架自动 diff 和更新。这与 React 的 Virtual DOM 思想完全一致。

  4. Activity 是入口,不是全部:一个应用可以有多个 Activity,但 Compose 时代推荐「单 Activity + 多 Compose 页面」架构,类似 Next.js 的单页应用。

  5. 资源系统解决适配:res/values/strings.xml 放文本,res/values-zh/strings.xml 放中文,res/layout/ 放布局。Android 根据设备语言、屏幕密度自动选择。

你可能会懵的地方

  • Android 开发一定要学 Java 吗? 不需要。Kotlin 是官方首选,Google 的新 API 和文档都是 Kotlin 优先。但存量代码里还有大量 Java,能读懂即可,不需要主动写。

  • 模拟器太慢怎么办? 用真机。开启开发者模式 → USB 调试 → 连接电脑。或者使用 Android Emulator 的 Quick Boot 快照功能。

  • Gradle Sync 一直失败? 检查 gradle-wrapper.properties 里的 Gradle 版本与 Android Studio 是否匹配。国内用户建议配置阿里云 Maven 镜像。

  • Compose 和 XML 布局选哪个? 新项目一律 Compose。XML 只在维护老代码或特定场景(如自定义 View 性能极致优化)时使用。

  • Android 和 iOS 开发思路差异大吗? 架构层面很像:都是声明式 UI(Compose vs SwiftUI)、都是响应式状态管理、都有官方 DI 框架。差异在生态和 API 命名习惯。

错法对照

错法问题正解
在 onCreate 里直接网络请求阻塞主线程,ANR 崩溃用 lifecycleScope.launch 或 ViewModel 里发起
所有代码写在一个 Activity 里上帝类,无法测试和维护拆分为 ViewModel + Repository + UseCase
硬编码字符串在代码里无法多语言适配提取到 strings.xml
忽视屏幕旋转旋转后状态丢失,用户输入清空用 rememberSaveable 或 ViewModel 保存状态
直接在 Composable 里读磁盘阻塞 UI,掉帧移交给 Dispatchers.IO 或使用 Room/DataStore

卡点急救

  1. 模拟器启动后黑屏/卡住:删除 AVD 重新创建,或换用 API 30 的 x86_64 镜像。确保 BIOS 开启了虚拟化(VT-x/AMD-V)。

  2. Gradle 下载依赖超时:在 settings.gradle.kts 的 dependencyResolutionManagement 里添加阿里云镜像:maven("https://maven.aliyun.com/repository/google")。

  3. 应用安装后闪退:看 Logcat 过滤 AndroidRuntime,通常是 ClassNotFoundException 或 Resources.NotFoundException,检查 minSdk 和依赖版本是否匹配。

面试常问

  • Android 系统架构分几层?每层职责? 四层:应用层(用户直接交互的 App)、应用框架层(Activity/Service/ContentProvider 等 Java API)、运行时与原生库(ART 虚拟机、OpenGL、SQLite 等 C/C++ 库)、Linux 内核(驱动、安全、进程管理)。ART 负责执行 DEX 字节码,与 JVM 的主要区别是 AOT 编译和针对移动设备优化的 GC。

  • Kotlin 相比 Java 在 Android 上的核心优势? 空安全(编译期避免 NPE)、协程(简化异步,替代 Callback Hell)、扩展函数(无需继承就能给现有类加方法)、data class(自动生成 equals/hashCode/toString)、与 Jetpack Compose 深度集成。

  • Gradle 在 Android 构建中做什么? 依赖管理(下载 AAR/JAR)、编译(Kotlin/Java → DEX)、打包(APK/AAB)、签名(debug/release keystore)、变体管理(debug/release/flavor)。相当于 Web 前端的 npm + webpack + babel 三合一。

自测三问

  1. 用一句话说明 ART 和 JVM 的区别。
  2. 为什么 Compose 里状态改变会自动刷新 UI?背后是什么机制?
  3. AndroidManifest.xml 里必须声明哪三类信息?

小结一句话

Android 开发 = Kotlin 语言 + Gradle 构建 + 声明式 UI + 移动设备生命周期管理;与 Web 前端思维相通,但 runtime 和分发方式完全不同。

延伸

  • Android 官方入门指南
  • Kotlin 官方文档
  • 下一课:四大组件——Activity/Service/BroadcastReceiver/ContentProvider 的职责与生命周期。
加载本节练习…
下一课 →四大组件