SuperAPI AI 工具集

android-di-hilt

编程与开发

查看项目

更新于 10-15 18:31

技能介绍

用途

Android DI Hilt 用于处理 Android 项目中与 Hilt 依赖注入相关的请求,典型触发场景包括:Android Hilt 设置、在 Hilt 中注入 ViewModel 与 Repository、在 Android 中为依赖设定作用域。其核心目标是:用 Hilt 完成 Android 依赖注入的接线,涵盖作用域、测试替换以及模块归属边界。

当任务的难点在于组件归属、绑定、作用域、入口点或测试替换时,适合使用该技能。如果请求只涉及网络 API 或 reducer 设计,则应改用相邻技能。

主要能力

  • 识别注入边界:应用级单例、Activity 保留实例、ViewModel、Worker、Service,或来自不受支持框架代码的入口点。
  • 决定绑定内容与方式:构造注入、@Binds、@Provides、限定符(qualifiers)、多重绑定(multibindings)或辅助注入(assisted injection)。
  • 显式匹配生命周期与作用域,避免依赖超出其所有者生命周期或过于频繁地重建。
  • 验证测试替换策略:使用 Hilt 测试模块、卸载模块(uninstall modules),或在正确的组件边界使用假实现。
  • 在依赖注入图归属正确之后,再交接 API 特定或架构相关问题。

使用方式

该技能以工作流形式组织:

  1. 首先识别注入边界:应用级单例、Activity 保留实例、ViewModel、Worker、Service,或来自不受支持框架代码的入口点。
  2. 决定应绑定的内容:构造注入、@Binds、@Provides、限定符、多重绑定或辅助注入。
  3. 显式匹配生命周期与作用域,使依赖不会超出其所有者生命周期或重建过于频繁。
  4. 验证测试替换策略,使用 Hilt 测试模块、卸载模块,或在正确的组件边界使用假实现。
  5. 仅在依赖注入图归属正确后,才交接 API 特定或架构问题。

技能中给出的示例命令包括:

  • 正常路径:cd examples/orbittasks-compose && ./gradlew :app:testDebugUnitTest
  • 边界情况:cd examples/orbittasks-xml && ./gradlew :app:testDebugUnitTest
  • 失败恢复:python3 scripts/eval_triggers.py --skill android-di-hilt

适用场景

  • 为 Android 应用接入 Hilt 依赖注入。
  • 在 Hilt 中注入 ViewModel 与 Repository。
  • 为 Android 依赖设定作用域。
  • 处理组件归属、绑定、作用域、入口点或测试替换等依赖注入图问题。
  • 规划测试中的依赖替换(Hilt 测试模块、卸载模块、假实现)。

限制与边界

  • 如果请求只涉及网络 API 或 reducer 设计,应改用相邻技能,而非本技能。
  • 当范围扩大时,可交接给 android-testing-unit、android-networking-retrofit-okhttp 等技能。
  • 该技能强调避免反模式:不要为了回避作用域问题而把所有东西都设为 @Singleton;不要在构造注入已足够时把业务构造逻辑藏进庞大的 @Provides 方法;不要把 Hilt 模块当作跨模块无关绑定的堆放处;不要混淆依赖注入图归属与应用架构归属。
  • 审查重点包括:组件与作用域对齐、绑定风格与限定符清晰度、不受支持入口点的桥接与测试替换策略、跨功能与核心代码的模块归属边界。
  • 完成清单:组件生命周期与依赖生命周期匹配;绑定风格显式且可测试;测试覆盖或假实现在正确的图边界规划;非依赖注入工作被交接而非埋在模块中。

官方参考

  • https://developer.android.com/training/dependency-injection/hilt-android
  • https://developer.android.com/training/dependency-injection/hilt-testing
  • https://developer.android.com/training/dependency-injection/hilt-multi-module
  • https://developer.android.com/topic/libraries/architecture/viewmodel
  • https://developer.android.com/training/dependency-injection/manual