--- description: Android 原生开发约定和最佳实践,包括 Kotlin、Jetpack Compose、架构模式等 globs: **/*.kt,**/*.java,**/*.xml alwaysApply: false --- # Android 开发规范 ## 项目结构和模块化 - 使用标准的 Android 项目结构 - 按功能模块组织代码,实现模块化架构 - 使用 Gradle Version Catalogs 管理依赖版本 - 合理划分 `app`、`feature`、`core`、`data` 模块 - 遵循包命名约定:`com.company.app.feature.domain` - 分离 `presentation`、`domain`、`data` 层 ## 编程语言和代码规范 - **强制使用 Kotlin**,避免 Java(除非维护遗留代码) - 遵循 [Kotlin 编码规范](mdc:languages/kotlin.mdc) - 优先使用数据类、密封类和内联类 - 合理使用扩展函数增强现有 API - 使用协程和 Flow 进行异步编程 - 避免使用 `!!` 操作符,优先使用安全调用 ## UI 开发 ### Jetpack Compose(推荐) - **优先使用 Jetpack Compose** 构建现代声明式 UI - 遵循 Composition over inheritance 原则 - 使用 `@Composable` 函数构建可重用组件 - 正确使用 `remember`、`LaunchedEffect`、`derivedStateOf` - 实现 `CompositionLocal` 进行依赖传递 - 使用 `Modifier` 进行样式和行为定制 ### 传统 View 系统 - 使用 View Binding 替代 `findViewById` - 避免使用 Data Binding(除非必要) - 正确使用 `ConstraintLayout` 和 `RecyclerView` - 实现自定义 View 时遵循测量、布局、绘制流程 ### 设计规范 - 遵循 **Material Design 3** 设计规范 - 实现动态颜色主题(Material You) - 支持深色主题和高对比度模式 - 实现响应式布局适配不同屏幕尺寸 - 使用 `WindowInsets` 处理状态栏和导航栏 ## 架构模式 ### 推荐架构 - 使用 **MVVM** 或 **MVI** 架构模式 - 遵循 **Clean Architecture** 原则 - 实现 **Repository 模式** 进行数据抽象 - 使用 **UseCase/Interactor** 封装业务逻辑 - 采用 **单向数据流** 设计 ### ViewModel 最佳实践 - 使用 `ViewModel` 管理 UI 相关数据 - 通过 `StateFlow`/`LiveData` 暴露状态 - 在 `ViewModel` 中处理业务逻辑 - 正确使用 `viewModelScope` 管理协程 - 避免在 `ViewModel` 中持有 Context 引用 ## 依赖注入 - **强制使用 Dagger Hilt** 进行依赖注入 - 正确配置 `@Module`、`@InstallIn`、作用域注解 - 使用 `@Qualifier` 区分相同类型的不同实现 - 避免循环依赖,合理设计依赖关系 - 使用 `@Provides` 和 `@Binds` 提供依赖 - 在测试中使用 `@TestInstallIn` 替换模块 ## 数据层实现 ### 本地存储 - 使用 **Room** 数据库进行复杂数据存储 - 使用 **DataStore** 替代 SharedPreferences - 正确实现数据库迁移策略 - 使用 `@TypeConverter` 处理复杂数据类型 - 实现数据访问对象(DAO)模式 ### 缓存策略 - 实现 **Repository** 模式统一数据访问 - 使用 `@Query` 和 `Flow` 实现响应式数据 - 实现离线优先(Offline-first)策略 - 正确处理缓存失效和数据同步 ## 网络层 - 使用 **Retrofit** 进行 REST API 调用 - 使用 **OkHttp** 拦截器处理认证、日志、缓存 - 实现适当的错误处理和重试机制 - 使用 **Moshi** 或 **Kotlinx Serialization** 进行 JSON 解析 - 正确处理网络连接状态变化 - 实现请求去重和防抖动 ## 异步编程和响应式 - **强制使用 Kotlin Coroutines** 进行异步编程 - 正确使用 `suspend` 函数和协程作用域 - 使用 **Flow** 进行响应式数据流编程 - 正确使用 `collectAsState()`、`collectAsStateWithLifecycle()` - 避免使用 `GlobalScope`,使用结构化并发 - 正确处理协程取消和异常 ## 生命周期管理 - 正确处理 Activity 和 Fragment 生命周期 - 使用 **Lifecycle-aware** 组件(`LifecycleObserver`) - 在 Compose 中使用 `DisposableEffect` 管理资源 - 使用 `viewLifecycleOwner` 在 Fragment 中观察数据 - 避免在组件销毁后执行异步操作 ## 导航和路由 - 使用 **Navigation Component** 进行页面导航 - 在 Compose 中使用 **Compose Navigation** - 正确处理深度链接(Deep Links) - 使用 Safe Args 进行类型安全的参数传递 - 实现单一 Activity 多 Fragment 架构 ## 性能优化 ### 渲染性能 - 使用 **Baseline Profiles** 优化应用启动 - 避免过度绘制和布局嵌套 - 正确使用 `RecyclerView` 的 `ViewHolder` 模式 - 在 Compose 中合理使用 `key()` 和 `remember()` ### 内存管理 - 避免内存泄漏,正确管理对象生命周期 - 使用 **LeakCanary** 检测内存泄漏 - 合理使用图片加载库(Glide、Coil) - 实现懒加载和分页加载 ### 启动优化 - 使用 **App Startup** 优化初始化流程 - 实现启动画面(Splash Screen API) - 避免在 Application 中执行耗时操作 ## 测试策略 ### 单元测试 - 为业务逻辑编写单元测试,目标覆盖率 ≥80% - 使用 **MockK** 进行 Kotlin 友好的模拟测试 - 使用 **Truth** 断言库提高测试可读性 - 测试 Repository、UseCase、ViewModel 层 ### UI 测试 - 使用 **Compose Test** 测试 Compose UI - 使用 **Espresso** 测试传统 View 系统 - 实现端到端测试覆盖关键用户流程 - 使用 **Hilt Testing** 进行依赖注入测试 ## 安全实践 - 正确实现运行时权限请求 - 使用 **Android Keystore** 存储敏感数据 - 实现网络安全配置(Network Security Config) - 使用 **Certificate Pinning** 防止中间人攻击 - 避免在日志中输出敏感信息 - 实现代码混淆和反调试措施 ## 国际化和无障碍 - 实现多语言支持(i18n) - 使用 **TalkBack** 测试无障碍功能 - 为 UI 元素添加 `contentDescription` - 支持从右到左(RTL)布局 - 实现动态字体大小适配 ## 构建和发布 ### 构建配置 - 使用 **Gradle Kotlin DSL** 编写构建脚本 - 配置多变体构建(Debug/Release/Staging) - 使用 **R8** 进行代码收缩和混淆 - 实现自动化版本管理 ### 发布流程 - 使用 **Android App Bundle(AAB)** 进行发布 - 配置应用签名和密钥管理 - 实现渐进式发布和 A/B 测试 - 使用 **Play Console** 进行应用分析 ## 代码质量保证 - 使用 **Detekt** 进行静态代码分析 - 配置 **Lint** 检查规则 - 使用 **ktfmt** 或 **ktlint** 进行代码格式化 - 实现 CI/CD 流水线进行自动化检查 - 定期进行代码审查(Code Review)