gpt4 book ai didi

android - 根据(API 级别)条件使用 @ContributesAndroidInjector

转载 作者:行者123 更新时间:2023-12-04 10:26:36 25 4
gpt4 key购买 nike

我有一个 ServiceBinderModule在我的 Android 应用程序中负责添加我所有的 Service s 到 DI 图是这样的:

@ContributesAndroidInjector
@ServiceScope
internal abstract fun myAutofillService(): MyAutofillService

我的问题是我有一个扩展 android.service.autofill.AutofillService 的服务仅可从 Android O 获得.在低于该 API 级别的设备上,我有一个不同的解决方案,但由于我有 MyAutofillService在图表上,应用程序在启动时崩溃( MyAutofillService 已经在 DaggerAppComponent 中,但 AutofillService 不在 Android 框架中)。

我看到了关于这个主题的帖子: https://github.com/google/dagger/issues/1064

建议使用 dagger.android.experimentalUseStringKeys@RequiresApi ,但它有一个警告: Keep in mind that enabling this also breaks incremental annotation processor support on Dagger 5.+ ,我认为这是一个交易破坏者。我也不太舒服 experimental...东西到一个生产应用程序。

有什么建议我可以做什么?我想放 MyAutofillService在基于设备 API 级别的图表上。

最佳答案

如果您不想使用 experimentalUseStringKeys ,我在该线程中喜欢的一个选项是 make a subcomponent for the higher API level .这个子组件只需要包含 MyAutofillService bundle 。

@RequiresApi(Build.VERSION_CODES.O)
@Subcomponent(modules = [MyApi26Module::class])
interface MyApi26Subcomponent : AndroidInjector<MyApplication>

@RequiresApi(Build.VERSION_CODES.O)
@Module
abstract class MyApi26Module {
@ContributesAndroidInjector
@ServiceScope
internal abstract fun myAutofillService(): MyAutofillService
}

创建主组件时,您可以查看您的 SDK_INT决定是直接安装还是创建 MyApi26Subcomponent并安装它。

关于android - 根据(API 级别)条件使用 @ContributesAndroidInjector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60615463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com