匕首和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
这个问题可以用与原始答案不同的波纹变化来解决
以下也将很好地解决这个问题
与插件
apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt'
和依赖关系
implementation "com.google.dagger:dagger:$dagger_version" implementation "com.google.dagger:dagger-android:$dagger_version" implementation "com.google.dagger:dagger-android-support:$dagger_version" kapt "com.google.dagger:dagger-compiler:$dagger_version" kapt "com.google.dagger:dagger-android-processor:$dagger_version"
参考检查这个要点