这份笔记基于 Google 推荐的现代 Android 开发实践,使用 Kotlin 作为主要语言,并整合了最新的 Jetpack 组件和架构指南,它适合有一定编程基础,希望快速上手或系统学习新版 Android 开发的开发者。

新版 Android 开发核心笔记
开发环境与工具
-
Android Studio
- 官方 IDE,集成了所有必要的开发、调试、性能分析工具。
- 版本要求:建议使用最新稳定版(如 Hedgehog | 2025.1.1 及以上)。
- 核心功能:
- Layout Editor: 可视化布局编辑器,支持 ConstraintLayout 和 Compose。
- Emulator: 功能强大的安卓模拟器。
- APK Analyzer: 分析 APK 包大小和内容。
- Profilers: CPU、内存、网络、能耗性能分析器。
- Version Control: 内置 Git 支持。
-
SDK (Software Development Kit)
- Android SDK Platform: 特定 Android 版本的 API 级别和系统镜像。
- Build Tools: 编译、打包 APK 所需的工具(如
aapt,dx/d8)。 - SDK Tools: 开发和管理工具(如
adb,emulator)。 - 最佳实践:在
build.gradle文件中指定compileSdk和targetSdk,这决定了你的应用可以使用的最新 API 和需要测试的最终目标版本。
-
Kotlin
- 官方首选语言,完全兼容 Java,语法更简洁、安全、富有表现力。
- 核心优势:
- 空安全:从编译层面杜绝
NullPointerException。 - 协程:简化异步编程,避免回调地狱。
- 扩展函数:为现有类添加新功能,无需继承。
- 数据类:一键生成
equals(),hashCode(),toString()等方法。
- 空安全:从编译层面杜绝
核心概念与架构
-
四大组件
(图片来源网络,侵删)- Activity: 应用的可视化界面,一个窗口。
- Service: 在后台长时间运行的无界面组件。
- Broadcast Receiver: 接收系统或应用广播的组件。
- Content Provider: 管理应用数据,并允许其他应用访问。
-
AndroidManifest.xml
- 应用的“身份证”和“配置文件”。
- 声明四大组件、权限、硬件需求、库依赖等。
-
应用架构
- 核心目标:关注点分离、可测试性、可维护性。
- 官方推荐架构:MVVM (Model-View-ViewModel)
- Model: 数据层,负责数据来源(网络、数据库、本地文件)和业务逻辑。
- View: UI 层,负责展示数据和用户交互(Activity/Fragment/Compose UI)。
- ViewModel: 连接 Model 和 View 的桥梁,持有并暴露 UI 所需的数据,监听 Model 的变化并通知 UI 更新,它不持有 View 的引用,因此配置更改(如屏幕旋转)时不会丢失数据。
现代 UI 开发 (Jetpack Compose)
Jetpack Compose 是 Google 推荐的用于构建原生 Android UI 的现代工具包,它使用更少的代码、强大的工具和直观的 Kotlin API,让你能快速打造精彩应用。
-
核心思想
(图片来源网络,侵删)- 声明式 UI: 你只需描述 UI 在不同状态下应该“是什么样子”,而不是“如何构建”它。
- 函数式: UI 由一个或多个可组合函数 构建。
- 单向数据流: 数据从上层(如 ViewModel)流向 UI 组件,用户操作通过事件回调(如
onClick)反向传递给上层。
-
基础概念
- @Composable 注解: 标记一个函数为可组合函数,用于构建 UI。
- @Preview 注解: 在不运行 App 的情况下,在 IDE 中预览 UI 布局。
- 状态: UI 需要响应的数据,当状态改变时,Compose 会自动重组 受该状态影响的 UI 部分。
- 状态提升: 将状态和更新状态的逻辑提升到共同父组件中,实现状态共享和单向数据流。
-
常用组件
- Text: 显示文本。
- **Button`: 可点击的按钮。
- **Image`: 显示图片。
- **ColumnRowBox`: 布局组件,分别用于垂直、水平、层叠排列子组件。
- **Scaffold
提供 Material Design 3 布局结构的脚手架,包含TopAppBarFloatingActionButtonBottomNavigationBar` 等。 - **LazyColumnLazyRow`: 高效地滚动长列表,只渲染可见项。
-
状态管理
remember: 在组合期间记住一个对象,在重组时返回同一对象,常用于保存非状态性数据(如LazyListState)。mutableStateOf: 创建一个可观察的状态对象,当其值改变时,会触发重组。by viewModel.viewModelScope.collectAsState(): 在 Compose 中收集 ViewModel 的StateFlow或LiveData,将 UI 状态与 Compose 链接起来。
Jetpack 核心库
Jetpack 是一系列库的集合,旨在简化 Android 开发。
-
ViewModel
- 作用: 在配置更改(如屏幕旋转)时存活,并管理与 UI 相关的数据。
- 关键类:
ViewModel,ViewModelProvider,ViewModelProvider.Factory。 - 最佳实践: 通过
by viewModels()委托属性在 Activity/Fragment 中安全地获取 ViewModel 实例。
-
LiveData / StateFlow
- 作用: 可观察的数据持有者,当数据变化时,它会通知观察者(通常是 UI)。
- LiveData: 生命周期感知的,只能在主线程观察,比较传统。
- StateFlow: Kotlin 协程的一部分,是
SharedFlow的一种特例,更现代、更灵活,支持协程上下文切换,是 Compose + ViewModel 通信的首选。
-
Room
- 作用: 一个对象映射库,提供本地数据库持久化功能。
- 三大核心组件:
- Entity: 数据库表中的实体类(用
@Entity注解)。 - DAO (Data Access Object): 定义访问数据库的方法(增删改查)(用
@Dao注解)。 - Database: 数据库持有者,并作为应用的 DAO 列表(用
@Database注解)。
- Entity: 数据库表中的实体类(用
- 优点: 编译时检查 SQL 查询、支持 RxJava、Flow 和 LiveData。
-
Navigation Component
- 作用: 管理应用中的导航,处理 Fragment 之间的跳转、回退栈和参数传递。
- 核心:
- NavGraph: 一个包含所有目标(屏幕)和它们之间连接的导航图。
- NavController: 管理导航图中的导航状态。
- NavHost: 一个导航容器,用于显示当前目标。
- 与 Compose 集成: 使用
navigation-compose库,通过NavController和NavHost实现声明式导航。
-
WorkManager
- 作用: 确保后台任务(即使应用退出或设备重启)能够可靠地执行。
- 特点: 保证至少执行一次,支持约束条件(如网络连接、充电状态)、链式任务和周期性任务。
- 适用场景: 数据同步、日志上传、备份等不需要立即执行但需要保证完成的任务。
-
DataStore
- 作用: 替代
SharedPreferences的现代解决方案,用于存储键值对。 - 两种类型:
- Proto DataStore: 将数据存储为自定义数据类的 Protocol Buffers 类型,类型安全,推荐使用。
- Preferences DataStore: 将数据存储为键值对,值类型为基本类型或
String。
- 优势: 使用 Flow 进行异步、事务性读取,支持数据迁移。
- 作用: 替代
网络与异步
-
Retrofit
- 作用: 类型安全的 HTTP 客户端,用于将 REST API 调用转换为 Kotlin/Java 接口。
- 核心: 定义接口方法,使用注解(如
@GET,@POST,@Query)描述请求,Retrofit 会为你生成实现。
-
Kotlinx Coroutines
- 作用: 处理异步代码的现代方式。
- 核心概念:
- 协程: 可以在主线程挂起而不阻塞的轻量级线程。
- 作用域: 定义协程的生命周期(如
viewModelScope,lifecycleScope)。 - 调度器: 决定协程在哪个线程运行(如
Dispatchers.Main用于 UI,Dispatchers.IO用于网络/磁盘)。 - 挂起函数: 只能在协程内部或其他挂起函数中调用的函数,用于执行异步操作并暂停协程执行。
-
协程 + Retrofit + Room 典型流程
// 在 ViewModel 的协程作用域中 viewModelScope.launch(Dispatchers.IO) { // 1. 使用 Retrofit 发起网络请求 val apiResponse = apiService.getData() // 2. 将数据存入 Room 数据库 dao.insertAll(apiResponse.data) // 3. 数据库操作完成后,切换到主线程更新 UI 状态 // (通常通过 StateFlow/LiveData 的 emit 完成,这里只是示意) withContext(Dispatchers.Main) { // 更新 UI } }
依赖注入
- 作用: 减少类之间的硬编码依赖,提高代码的可测试性、模块化和可维护性。
- 官方推荐库: Hilt
- 基于 Dagger 构建,但大大简化了配置。
- 通过
@HiltAndroidApp注解 Application 类。 - 使用
@AndroidEntryPoint注解 Activity、Fragment、Service 等。 - 使用
@Inject标记构造函数或属性,@Module和@Provides提供依赖,@EntryPoint在非 Hilt 管理的类中获取依赖。
应用打包与发布
-
构建配置 (
build.gradle)compileSdk: 使用最新的 Android API。minSdk: 最低支持的 Android API。targetSdk: 针对、优化过的 Android API。applicationId: 应用的唯一标识符(包名)。versionCode: 整数,用于判断应用版本新旧,上传到 Play Store 必须递增。versionName: 字符串,显示给用户看的版本号(如 "1.0.0")。
-
签名 APK / App Bundle
- 签名: 确保 APK 的来源和完整性。
- App Bundle (AAB): Google Play 推荐的发布格式,开发者上传 AAB,Google Play 会根据不同设备生成和分发优化的 APK,减小用户安装包大小。
-
发布流程
- Google Play Console: 上传 AAB,管理应用版本、定价、发布、数据分析等。
学习路径建议
- 基础入门: 掌握 Kotlin 语法、四大组件、Activity/Fragment 生命周期。
- UI 进阶: 学习 Jetpack Compose,这是未来的方向,务必重点掌握。
- 架构学习: 深入理解 MVVM 架构,学习使用 ViewModel + StateFlow/LiveData + Navigation。
- 数据持久化: 学习使用 Room 进行本地数据库存储。
- 网络与异步: 掌握 Retrofit + Kotlin Coroutines 的结合使用。
- 高级主题: 学习 Hilt 进行依赖注入,了解 WorkManager 和 DataStore 的应用场景。
- 实战项目: 综合运用以上知识,构建一个完整的应用(如天气 App、新闻客户端)。
这份笔记涵盖了新版 Android 开发的核心脉络,祝你在 Android 开发的道路上越走越远!
