Files
cattleTransportation/.cursor/rules/frameworks/android.mdc
2025-11-04 09:38:19 +08:00

194 lines
6.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 BundleAAB** 进行发布
- 配置应用签名和密钥管理
- 实现渐进式发布和 A/B 测试
- 使用 **Play Console** 进行应用分析
## 代码质量保证
- 使用 **Detekt** 进行静态代码分析
- 配置 **Lint** 检查规则
- 使用 **ktfmt** 或 **ktlint** 进行代码格式化
- 实现 CI/CD 流水线进行自动化检查
- 定期进行代码审查Code Review