匕首和Kotlin。 匕首不生成组件类
我是新的kotlin和匕首。 我有一个小问题,我不怎么解决,我找不到解决方案。
所以这就是我所拥有的
@Module class AppModule (app: Application) { private var application: Application; init { this.application = app; } @Provides fun provideApplication(): Application? { return application; } @Provides fun provideResources(): Resources? { return application.resources; }
}
@Singleton @Component(modules = arrayOf(AppModule::class)) interface AppComponent: AppComponentBase { public class Initializer { private constructor(){} companion object { fun Init(app: Application): AppComponent? { return DaggerAppComponent.builder().appModule(AppModule(app)).build() } } } }
AppComponentBase
:这个接口包含了这个组件所需要的所有方法。
现在,问题是这个DaggerAppComponent
类不是由Dagger生成的,如果我在companion object
执行了DaggerAppComponent.builder().appModule(AppModule(app)).build()
调用。 如果一个调用同一行的任何被companion object
匕首生成de类没有任何问题。
另外一件事我找了一个解决方案是创建一个具有相同结构的其他类,并将DaggerAppComponent
作为内部对象DaggerAppComponent
,并得到相同的结果。
我不知道外部组件的初始化。 那么,还有其他的解决办法,或者我做错了什么?
您需要在build.gradle中使用kapt处理器 :
kapt { generateStubs = true } dependencies { ... compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile 'com.google.dagger:dagger:2.0.2' kapt 'com.google.dagger:dagger-compiler:2.0.2' ... }
这个扩展将生成匕首的代码。
您可以查看该项目以供参考
我不知道什么时候发生了这种改变,但是在Kotlin gradle插件的1.1.2版本中,你替换了这个(在你的模块的build.gradle
):
kapt { generateStubs = true }
有了这个:
apply plugin: 'kotlin-kapt'
然后确保用kapt
替换使用annotationProcessor
依赖关系。
例如,旧的方法是使用:
annotationProcessor ( 'some.library:one:1.0' ... 'some.library.n:n.0' )
现在你使用:
kapt ( 'some.library:one:1.0' ... 'some.library.n:n.0' )
更新KOTLIN 1.1.4
generateStubs
不起作用了。 随意使用最新的Kotlin进行构建,它会告诉你在Android Studio的消息部分,这是没有必要了。 以下是适用于Android和Kotlin的Dagger2的最新依赖列表
apply plugin: 'kotlin-kapt' //... // Other Gradle stuff //... dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:1.1.4-3" compile 'com.google.dagger:dagger-android:2.12' kapt 'com.google.dagger:dagger-android-processor:2.12' compileOnly 'com.google.dagger:dagger:2.12' kapt 'com.google.dagger:dagger-compiler:2.12' }
如果你对DaggerComponent
有问题,你应该添加
apply plugin: 'kotlin-kapt' kapt { generateStubs = true }
build.gradle
它将生成dagger 2
kotlin
代码,否则项目将只建立在Rebuild
我创建了katas,学习如何用Kotlin重构应用程序https://github.com/xurxodev/Movies-Kotlin-Kata
一个卡塔是关于匕首和它在主分支为我解决https://github.com/xurxodev/Movies-Kotlin-Kata/tree/kata_di_movies
为了更好地理解这个GitHub仓库的目标,我写了一篇中文文章https://proandroiddev.com/learn-kotlin-refactoring-an-app-38cf0cbefe6c
- 用匕首使用Kotlin
- Android Dagger 2.11与Kotlin,ContributesAndroidInjector注解问题
- 改进API调用:如何确保在进行api调用后该值不为空?
- Android Kotlin匕首2 ViewModel注入错误
- Dagger2和Kotlin运行失败的原因是:app:compileDebugKotlinAfterJava
- 匕首2在Kotlin未解决的参考DaggerXXXSub
- Kotlin Kapt:java.lang.IllegalStateException:endPosTable已经设置
- 处理注释时发生了一些错误
- kapt构建失败与匕首Android处理器