关于 modern-jetpack-compose
用于审查和生成 Jetpack Compose 代码的技能,依据现代 Android 实践提供指导。它按步骤覆盖 API、状态、设计、无障碍和性能等方面。
主要功能
- 01按 11 个领域顺序审查代码
- 02现代 Compose API 指导
- 03Material 3 与自适应设计检查
- 04状态、副作用与重组审查
- 05无障碍与性能检查
适用场景
- 01审查现有 Compose 界面
- 02生成符合惯例的 Compose 功能
- 03查找状态与副作用问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ anhvt52/ jetpack-compose-skills --skill modern-jetpack-compose安装后在 Claude Code 中输入/modern-jetpack-compose确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/.gitkeepopenai.yamlreferences/.gitkeepaccessibility.mdapi.mdcomposables.mddesign.mdeffects.mdhygiene.mdkotlin.mdnavigation.mdperformance.mdrecomposition.mdstate.md详细介绍
审查或生成 Jetpack Compose 代码,确保其正确、使用现代 API,并遵循 Android 最佳实践。只报告确实存在的问题——除非风格问题违反了明确规则,否则不要吹毛求疵。
审查/生成流程
审查现有代码时,按以下顺序执行:
- 检查是否使用了已弃用或过时的 API →
references/api.md - 检查可组合项结构和组合模式 →
references/composables.md - 验证状态管理和数据流 →
references/state.md - 验证副作用的用法 →
references/effects.md - 检查重组稳定性 →
references/recomposition.md - 验证导航实现 →
references/navigation.md - 检查是否符合 Material 3/Expressive 设计规范 →
references/design.md - 验证无障碍功能 →
references/accessibility.md - 检查性能 →
references/performance.md - 快速审查 Kotlin 代码 →
references/kotlin.md - 最后检查代码规范 →
references/hygiene.md
生成新代码时,先加载与待实现功能相关的参考文件,再编写代码,确保从一开始就遵循惯用写法。
对于部分审查或针对性生成,只加载相关的参考文件。
核心指示
- 默认以 Compose BOM 2024.x 为目标版本。请说明 BOM 2025.x(Material Expressive)引入了哪些新组件或 API。
- 使用 Material 3。除非项目已经在使用 Material 2,否则不要使用 Material 2。
- 架构:采用单向数据流(UDF)的 MVVM。使用 ViewModel + StateFlow 管理屏幕状态。Compose UI 观察状态并发出事件。
- 以 Kotlin 为目标语言,使用现代语言特性(密封接口、协程、Flow)。
- 未经事先询问,不要引入第三方库。
- 每个可组合项都应放在单独的文件中,非简单组件尤其如此。
- 按功能组织代码,而不是按技术层组织(例如 screens/home/、screens/settings/)。
输出格式
按文件整理问题。对于每个问题:
- 写明文件和相关行号。
- 指出违反的规则。
- 展示简短的修改前/修改后 Kotlin 代码片段。
跳过没有问题的文件。最后按优先级总结最值得优先处理的改动。
输出示例:
HomeScreen.kt
第 14 行:使用 collectAsStateWithLifecycle() 替代 collectAsState()。
// Before
val uiState by viewModel.uiState.collectAsState()
// After
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
第 42 行:在 LazyColumn 中为列表项提供 key,确保条目标识稳定。
// Before
LazyColumn {
items(books) { book ->
BookItem(book)
}
}
// After
LazyColumn {
items(books, key = { it.id }) { book ->
BookItem(book)
}
}
第 67 行:Image 缺少 contentDescription,不符合无障碍要求。
// Before
Image(painter = painterResource(R.drawable.cover), contentDescription = null)
// After — if decorative:
Image(painter = painterResource(R.drawable.cover), contentDescription = null) // OK if truly decorative
// After — if meaningful:
Image(
painter = painterResource(R.drawable.cover),
contentDescription = stringResource(R.string.book_cover_description)
)
总结
- 状态(高): 第 14 行的
collectAsState()不会遵循生命周期——请替换为collectAsStateWithLifecycle()。 - 性能(中): 第 42 行的
LazyColumn缺少key,会导致不必要的重组。 - 无障碍(中): 第 67 行的 Image 需要有意义的
contentDescription。
参考资料
references/api.md— 已弃用的 API 及其现代替代方案。references/composables.md— 可组合项结构、命名和组合模式。references/state.md— 状态管理、ViewModel、StateFlow 和数据流。references/effects.md— 副作用:LaunchedEffect、DisposableEffect、SideEffect。references/recomposition.md— 重组稳定性、@Stable/@Immutable、derivedStateOf。references/navigation.md— Navigation Compose、类型安全导航、嵌套图。references/design.md— Material 3/Expressive 主题、自适应布局。references/accessibility.md— TalkBack、语义、内容描述、触控目标。references/performance.md— LazyList 优化、remember、状态读取范围。references/kotlin.md— 现代 Kotlin Android 编程模式。references/hygiene.md— 代码规范、测试、lint。
评论
支持 Markdown