跳转至

第 01 章 现代 Android 开发框架概述

学习目标:理解现代 Android 开发生态系统,掌握核心技术栈的选择依据与架构设计原则。

预计学习时间: 2-3 天 实践时间: 1 天


目录

  1. Android 开发生态系统演进
  2. 现代技术栈全景图
  3. 架构模式深度解析
  4. 技术选型决策框架
  5. Android 15 (API 35) 新特性与适配要点
  6. 学习路径规划
  7. 实践练习

1. Android 开发生态系统演进

1.1 历史演进轨迹

Android 开发自 2008 年发布以来,经历了多次重大技术变革:

Text Only
2008-2012: 原生Java时代
├── XML布局主导
├── Activity/Service/BroadcastReceiver/ContentProvider
└── 异步处理:AsyncTask + Handler

2013-2016: Support Library时代
├── AppCompat支持库
├── RecyclerView取代ListView
├── Design Support Library
└── 权限模型变化(Android 6.0)

2017-2019: Kotlin优先时代
├── Google I/O 2017宣布Kotlin为一级语言
├── Android Architecture Components
├── Room数据库
├── ViewModel + LiveData
└── Paging、WorkManager等组件

2020-2023: Jetpack Compose时代
├── 声明式UI编程范式
├── Compose成为官方推荐UI框架
├── Material Design 3
└── 协程全面普及

2024-至今: AI辅助开发时代
├── AI代码生成工具普及
├── 智能化开发工作流
├── 自动化测试与优化
└── Android 15 (API 35) 新特性适配

1.2 现代开发核心理念

现代 Android 开发遵循以下核心原则:

原则 说明 技术实现
Kotlin 优先 官方推荐语言,空安全、简洁、函数式 Kotlin 2.3.0+
声明式 UI 描述 UI 应该是什么样子,而非如何构建 Jetpack Compose
响应式编程 数据驱动 UI 自动更新 StateFlow/Compose State
架构组件化 关注点分离,可测试、可维护 MVVM + Jetpack
协程异步 简化异步代码,避免回调地狱 Kotlin Coroutines
类型安全导航 编译期检查,避免运行时错误 Navigation Compose

2. 现代技术栈全景图

2.1 核心技术栈架构

Text Only
┌─────────────────────────────────────────────────────────────┐
│                    表现层 (Presentation Layer)               │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────────┐  ┌─────────────────┐  ┌──────────────┐ │
│  │   UI Screen     │  │   ViewModel     │  │   State      │ │
│  │  (Composable)   │  │   (Business)    │  │  (UI State)  │ │
│  └────────┬────────┘  └────────┬────────┘  └──────┬───────┘ │
│           │                    │                   │        │
│           └────────────────────┴───────────────────┘        │
│                              │                              │
├──────────────────────────────┼──────────────────────────────┤
│                    领域层 (Domain Layer)                     │
├──────────────────────────────┼──────────────────────────────┤
│  ┌─────────────────┐  ┌──────┴──────────┐  ┌──────────────┐ │
│  │   Use Case      │  │   Repository    │  │   Model      │ │
│  │  (Interactors)  │  │   (Interface)   │  │  (Entity)    │ │
│  └────────┬────────┘  └──────┬──────────┘  └──────────────┘ │
│           │                  │                              │
├───────────┼──────────────────┼──────────────────────────────┤
│           │         数据层 (Data Layer)                      │
├───────────┼──────────────────┼──────────────────────────────┤
│  ┌────────┴────────┐  ┌──────┴──────────┐  ┌──────────────┐ │
│  │   Repository    │  │   Data Source   │  │   Network    │ │
│  │  (Implementation)│  │  (Local/Remote) │  │   (API)      │ │
│  └─────────────────┘  └─────────────────┘  └──────────────┘ │
└─────────────────────────────────────────────────────────────┘

2.2 技术栈组件详解

2.2.1 UI 层: Jetpack Compose

Kotlin
// 声明式UI示例
@Composable
fun UserProfileScreen(user: User, onEditClick: () -> Unit) {
    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(16.dp),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        // 头像
        AsyncImage(
            model = user.avatarUrl,
            contentDescription = "User Avatar",
            modifier = Modifier
                .size(120.dp)
                .clip(CircleShape)
        )

        Spacer(modifier = Modifier.height(16.dp))

        // 用户名
        Text(
            text = user.name,
            style = MaterialTheme.typography.headlineMedium
        )

        // 编辑按钮
        Button(onClick = onEditClick) {
            Text("编辑资料")
        }
    }
}

核心优势: - 代码简洁: XML 布局代码量减少 50%+ - 实时预览:@Preview 注解即时查看效果 - 状态驱动:数据变化自动触发 UI 更新 - 动画简单:内置丰富的动画 API

2.2.2 架构层: MVVM + Jetpack

Kotlin
// ViewModel示例
class UserViewModel @Inject constructor(
    private val getUserUseCase: GetUserUseCase
) : ViewModel() {

    private val _uiState = MutableStateFlow(UserUiState())
    val uiState: StateFlow<UserUiState> = _uiState.asStateFlow()

    fun loadUser(userId: String) {
        viewModelScope.launch {
            _uiState.update { it.copy(isLoading = true) }

            getUserUseCase(userId)
                .onSuccess { user ->
                    _uiState.update {
                        it.copy(user = user, isLoading = false)
                    }
                }
                .onFailure { error ->
                    _uiState.update {
                        it.copy(error = error.message, isLoading = false)
                    }
                }
        }
    }
}

2.2.3 数据层: Repository 模式

Kotlin
// Repository接口
interface UserRepository {
    suspend fun getUser(userId: String): Result<User>
    suspend fun updateUser(user: User): Result<Unit>
    fun getUsersFlow(): Flow<List<User>>
}

// Repository实现
class UserRepositoryImpl @Inject constructor(
    private val userDao: UserDao,
    private val userApi: UserApi
) : UserRepository {

    override suspend fun getUser(userId: String): Result<User> {
        return try {  // try/catch捕获异常
            // 先尝试从网络获取
            val remoteUser = userApi.getUser(userId)
            userDao.insertUser(remoteUser.toEntity())
            Result.success(remoteUser.toDomain())
        } catch (e: Exception) {
            // 网络失败则从本地获取
            userDao.getUserById(userId)?.let {
                Result.success(it.toDomain())
            } ?: Result.failure(e)
        }
    }
}

2.3 依赖注入: Hilt

Kotlin
// Application类
@HiltAndroidApp
class MyApplication : Application()

// 模块定义
@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {

    @Provides
    @Singleton
    fun provideRetrofit(): Retrofit {
        return Retrofit.Builder()
            .baseUrl(BuildConfig.BASE_URL)
            .addConverterFactory(Json.asConverterFactory())
            .build()
    }
}

// 注入使用
@HiltViewModel
class MyViewModel @Inject constructor(
    private val repository: UserRepository
) : ViewModel()

3. 架构模式深度解析

3.1 MVVM 架构详解

MVVM ( Model-View-ViewModel )是现代 Android 开发的标准架构模式:

Text Only
┌─────────────────────────────────────────────────────────────┐
│                         View (UI)                           │
│                    (Activity/Fragment)                       │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  - 观察ViewModel的状态                               │   │
│  │  - 将用户操作转发给ViewModel                         │   │
│  │  - 不包含业务逻辑                                    │   │
│  └─────────────────────────────────────────────────────┘   │
│                           │                                  │
│                           │ 观察 (Observe)                    │
│                           ▼                                  │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                    ViewModel                         │   │
│  │  ┌───────────────────────────────────────────────┐  │   │
│  │  │  - 持有UI状态 (StateFlow/LiveData)             │  │   │
│  │  │  - 处理用户交互                                  │  │   │
│  │  │  - 调用UseCase/Repository                        │  │   │
│  │  │  - 不引用View                                   │  │   │
│  │  └───────────────────────────────────────────────┘  │   │
│  └─────────────────────────────────────────────────────┘   │
│                           │                                  │
│                           │ 调用                              │
│                           ▼                                  │
│  ┌─────────────────────────────────────────────────────┐   │
│  │              UseCase / Repository                    │   │
│  │  ┌───────────────────────────────────────────────┐  │   │
│  │  │  - 业务逻辑                                      │  │   │
│  │  │  - 数据转换                                      │  │   │
│  │  │  - 协调多个数据源                                │  │   │
│  │  └───────────────────────────────────────────────┘  │   │
│  └─────────────────────────────────────────────────────┘   │
│                           │                                  │
│                           ▼                                  │
│  ┌─────────────────────────────────────────────────────┐   │
│  │              Model (Data Layer)                      │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  │   │
│  │  │   Entity    │  │    DTO      │  │    DAO      │  │   │
│  │  │  (Domain)   │  │  (Network)  │  │  (Local)    │  │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘  │   │
│  └─────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘

MVVM 架构详解

图: MVVM ( Model-View-ViewModel )架构模式详解

3.2 状态管理策略

单向数据流( UDF )

Text Only
用户操作 → ViewModel → 更新状态 → UI自动刷新
              ↑                          │
              └────── 观察状态变化 ←──────┘

单向数据流

图:单向数据流( UDF )模式:用户操作 → ViewModel → 更新状态 → UI 自动刷新

Kotlin
// UI状态定义
data class NewsUiState(
    val isLoading: Boolean = false,
    val news: List<NewsItem> = emptyList(),
    val error: String? = null,
    val selectedCategory: NewsCategory = NewsCategory.ALL
)

// ViewModel实现
class NewsViewModel @Inject constructor(
    private val getNewsUseCase: GetNewsUseCase
) : ViewModel() {

    private val _uiState = MutableStateFlow(NewsUiState())
    val uiState: StateFlow<NewsUiState> = _uiState.asStateFlow()

    fun selectCategory(category: NewsCategory) {
        _uiState.update { it.copy(selectedCategory = category) }
        loadNews()
    }

    private fun loadNews() {
        viewModelScope.launch {
            _uiState.update { it.copy(isLoading = true, error = null) }

            getNewsUseCase(_uiState.value.selectedCategory)
                .collect { result ->
                    result.onSuccess { news ->
                        _uiState.update {
                            it.copy(news = news, isLoading = false)
                        }
                    }.onFailure { error ->
                        _uiState.update {
                            it.copy(error = error.message, isLoading = false)
                        }
                    }
                }
        }
    }
}

3.3 组件生命周期管理

Kotlin
// 生命周期感知的数据收集
@Composable
fun NewsScreen(viewModel: NewsViewModel = hiltViewModel()) {
    val uiState by viewModel.uiState.collectAsStateWithLifecycle()

    when {
        uiState.isLoading -> LoadingIndicator()
        uiState.error != null -> ErrorMessage(uiState.error!!)
        uiState.news.isEmpty() -> EmptyState()
        else -> NewsList(uiState.news)
    }
}

4. 技术选型决策框架

4.1 UI 框架选择

特性 Jetpack Compose XML Views
学习曲线 中等(新范式) 平缓(传统)
代码简洁度 ⭐⭐⭐⭐⭐ ⭐⭐⭐
预览支持 实时预览 设计时预览
动画支持 内置丰富 需额外库
性能 优秀(智能重组) 良好
社区生态 快速增长 成熟稳定
Google 支持 官方推荐 维护模式

推荐:新项目直接使用 Jetpack Compose ;维护项目可渐进式迁移。

4.2 状态管理方案对比

方案 适用场景 优点 缺点
StateFlow 大多数场景 协程原生、冷流、可测试 需手动管理生命周期
LiveData 与 View 生命周期绑定 自动生命周期管理 需额外依赖、主线程限制
Compose State 简单 UI 状态 简洁、自动重组 不适合复杂业务逻辑
MVI 复杂状态机 可追溯、时间旅行调试 样板代码多

4.3 网络库选择

特点 推荐度
Retrofit + OkHttp 标准方案、类型安全、协程支持 ⭐⭐⭐⭐⭐
Ktor Client Kotlin 原生、多平台、灵活 ⭐⭐⭐⭐
Volley 轻量级、 Google 维护 ⭐⭐⭐

4.4 本地存储方案

方案 适用场景 复杂度
Room 结构化数据、关系型 中等
DataStore 键值对、类型安全 Preferences
MMKV 高性能键值对
Realm 对象数据库 中等

5. Android 15 (API 35) 新特性与适配要点

5.1 Android 15 重要更新

Android 15 ( API 35 )于 2024 年发布,带来了多项重要更新和行为变更。根据 Google Play 政策,2025 年 8 月 31 日起新上架应用、 2025 年 11 月 1 日起应用更新都必须以 Android 15 ( API 35 )为目标平台

核心新特性

特性 说明 影响
Edge-to-Edge 默认启用 系统栏区域默认透明,应用内容延伸至全屏 需要适配系统栏内边距
预测性返回动画 手势返回时显示预览动画,提升用户体验 需要处理返回手势拦截
低光增强 相机 API 新增低光环境自动增强功能 相机应用可利用此特性
JobScheduler 严格检查 任务调度间隔必须≥15 分钟,否则崩溃 后台任务需要调整策略
16KB 页面大小支持 支持 16KB 内存页面,提升性能 NDK 应用需要重新编译

Edge-to-Edge 适配

Android 15 默认启用边到边( Edge-to-Edge )显示,应用内容会延伸到系统栏(状态栏和导航栏)下方:

Kotlin
// 在Activity中处理系统栏内边距
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 启用边到边显示
        enableEdgeToEdge()

        setContent {
            MyAppTheme {
                // 使用WindowInsets处理系统栏内边距
                Scaffold(
                    modifier = Modifier.fillMaxSize(),
                    contentWindowInsets = WindowInsets(0, 0, 0, 0)
                ) { innerPadding ->
                    // 内容区域自动处理内边距
                    Content(
                        modifier = Modifier.padding(innerPadding)
                    )
                }
            }
        }
    }
}

预测性返回手势

Android 15 引入了预测性返回动画,用户执行返回手势时会显示上一个页面的预览:

Kotlin
// 在Activity中启用预测性返回
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        // 启用预测性返回动画
        if (Build.VERSION.SDK_INT >= 35) {
            onBackInvokedDispatcher.registerOnBackInvokedCallback(
                OnBackInvokedDispatcher.PRIORITY_DEFAULT
            ) {
                // 处理返回逻辑
                handleBackNavigation()
            }
        }
    }
}

5.2 目标 API 升级检查清单

升级到 API 35 时需要检查以下事项:

  • 系统栏适配:检查所有页面是否正确处理 WindowInsets
  • 后台任务:验证 JobScheduler 任务间隔是否符合新要求
  • 通知权限:确认通知权限请求流程( Android 13+要求)
  • 存储权限:检查是否使用正确的存储访问框架
  • 定位权限:验证前台/后台定位权限申请

6. 学习路径规划

6.1 推荐学习顺序

Text Only
第1阶段:基础构建(第1-3章)
├── 第01章:现代Android开发框架概述
├── 第02章:VS Code开发环境深度配置
└── 第03章:Kotlin语言核心特性
    └── 目标:能编写简单的Kotlin程序

第2阶段:UI开发(第4章)
└── 第04章:Jetpack Compose UI框架详解
    └── 目标:能独立设计实现复杂UI

第3阶段:架构与数据(第5-6章)
├── 第05章:MVVM架构与组件交互
└── 第06章:数据处理与API集成
    └── 目标:能开发完整的数据驱动应用

第4阶段:进阶主题(第7-8章)
├── 第07章:状态管理与性能优化
└── 第08章:AI辅助开发集成指南
    └── 目标:掌握高级开发技巧

第5阶段:工程实践(第9-10章)
├── 第09章:测试策略与质量保证
└── 第10章:部署流程与持续集成
    └── 目标:能发布生产级应用

第6阶段:项目实战
└── 完成3-5个实践案例
    └── 目标:具备独立开发能力

6.2 学习检查点

阶段 检查点 完成标准
第 1 阶段 Kotlin 基础 能独立编写 100 行以上的 Kotlin 程序
第 2 阶段 UI 开发 实现一个包含列表、表单、导航的界面
第 3 阶段 数据集成 完成一个网络数据展示应用
第 4 阶段 AI 辅助 能使用 AI 工具提升开发效率 30%+
第 5 阶段 完整项目 发布一个应用到 Play Store

7. 实践练习

练习 1 :技术栈调研

任务:调研以下技术栈在实际项目中的应用案例

  1. 查找 3 个使用 Jetpack Compose 的开源项目
  2. 分析其架构设计和技术选型
  3. 总结可借鉴的最佳实践

提交要求: - 项目链接和简介 - 架构图分析 - 学习心得(不少于 300 字)

练习 2 :架构设计

任务:为待办事项应用设计架构

要求: 1. 绘制完整的 MVVM 架构图 2. 定义数据模型( Task 、 Category 等) 3. 设计 Repository 接口 4. 规划 UI 状态结构

参考模板

Kotlin
// 数据模型
data class Task(
    val id: String,
    val title: String,
    val description: String,
    val isCompleted: Boolean,
    val category: Category,
    val dueDate: LocalDateTime?
)

// UI状态
data class TodoUiState(
    val tasks: List<Task> = emptyList(),
    val filter: TaskFilter = TaskFilter.ALL,
    val isLoading: Boolean = false,
    val error: String? = null
)

// Repository接口
interface TaskRepository {  // interface定义类型契约
    fun getTasksFlow(): Flow<List<Task>>
    suspend fun addTask(task: Task): Result<Unit>
    suspend fun updateTask(task: Task): Result<Unit>
    suspend fun deleteTask(taskId: String): Result<Unit>
}

练习 3 :环境准备

任务:配置开发环境

  1. 安装 Android Studio 或配置 VS Code
  2. 创建第一个 Jetpack Compose 项目
  3. 运行 Hello World 应用
  4. 截图记录成功运行的界面

本章小结

核心要点

  1. 现代 Android 开发以 Kotlin + Jetpack Compose + MVVM 为核心技术栈
  2. 声明式 UI是未来的发展方向, Jetpack Compose 已成为官方推荐
  3. 架构分层(表现层/领域层/数据层)确保代码可维护性和可测试性
  4. AI 辅助开发正在改变开发方式,需要掌握相关工具和工作流

关键术语

术语 说明
Jetpack Compose Google 推出的声明式 UI 框架
MVVM Model-View-ViewModel 架构模式
Coroutines Kotlin 协程,简化异步编程
StateFlow 响应式状态流,用于 UI 状态管理
Hilt 依赖注入框架,简化对象创建
Repository 数据仓库模式,统一数据访问

下一步

完成本章学习后,请进入第 02 章: VS Code 开发环境深度配置,开始搭建你的开发环境。


参考资源

官方文档

开源项目

社区资源


本章完成时间:预计 2-3 天