跳转至

第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天