第01章 现代Android开发框架概述¶
学习目标:理解现代Android开发生态系统,掌握核心技术栈的选择依据与架构设计原则。
预计学习时间:2-3天 实践时间:1天
目录¶
1. Android开发生态系统演进¶
1.1 历史演进轨迹¶
Android开发自2008年发布以来,经历了多次重大技术变革:
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 核心技术栈架构¶
┌─────────────────────────────────────────────────────────────┐
│ 表现层 (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¶
// 声明式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¶
// 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模式¶
// 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¶
// 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开发的标准架构模式:
┌─────────────────────────────────────────────────────────────┐
│ 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(Model-View-ViewModel)架构模式详解
3.2 状态管理策略¶
单向数据流(UDF)¶
图:单向数据流(UDF)模式:用户操作 → ViewModel → 更新状态 → UI自动刷新
// 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 组件生命周期管理¶
// 生命周期感知的数据收集
@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)显示,应用内容会延伸到系统栏(状态栏和导航栏)下方:
// 在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引入了预测性返回动画,用户执行返回手势时会显示上一个页面的预览:
// 在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 推荐学习顺序¶
第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:技术栈调研¶
任务:调研以下技术栈在实际项目中的应用案例
- 查找3个使用Jetpack Compose的开源项目
- 分析其架构设计和技术选型
- 总结可借鉴的最佳实践
提交要求: - 项目链接和简介 - 架构图分析 - 学习心得(不少于300字)
练习2:架构设计¶
任务:为待办事项应用设计架构
要求: 1. 绘制完整的MVVM架构图 2. 定义数据模型(Task、Category等) 3. 设计Repository接口 4. 规划UI状态结构
参考模板:
// 数据模型
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:环境准备¶
任务:配置开发环境
- 安装Android Studio或配置VS Code
- 创建第一个Jetpack Compose项目
- 运行Hello World应用
- 截图记录成功运行的界面
本章小结¶
核心要点¶
- 现代Android开发以Kotlin + Jetpack Compose + MVVM为核心技术栈
- 声明式UI是未来的发展方向,Jetpack Compose已成为官方推荐
- 架构分层(表现层/领域层/数据层)确保代码可维护性和可测试性
- AI辅助开发正在改变开发方式,需要掌握相关工具和工作流
关键术语¶
| 术语 | 说明 |
|---|---|
| Jetpack Compose | Google推出的声明式UI框架 |
| MVVM | Model-View-ViewModel架构模式 |
| Coroutines | Kotlin协程,简化异步编程 |
| StateFlow | 响应式状态流,用于UI状态管理 |
| Hilt | 依赖注入框架,简化对象创建 |
| Repository | 数据仓库模式,统一数据访问 |
下一步¶
完成本章学习后,请进入第02章:VS Code开发环境深度配置,开始搭建你的开发环境。
参考资源¶
官方文档¶
开源项目¶
- Now in Android - Google官方示例
- Android Architecture Samples
- Compose Samples
社区资源¶
本章完成时间:预计2-3天

