KotlinとDaggerが初めてです。解決方法がわからないという小さな問題があり、解決策が見つかりません。
だからこれは私が持っているものです:
_@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
:このインターフェイスには、このコンポーネントに必要なすべてのメソッドが含まれます。
現在、問題は、_companion object
_内でこのDaggerAppComponent.builder().appModule(AppModule(app)).build()
呼び出しを行うと、このDaggerAppComponent
クラスがDaggerによって生成されないことです。同じ行を呼び出した場合、_companion object
_ daggerが問題なくクラスを生成します。
私が解決策を探した他のことは、同じ構造を持つ別の異なるクラスを作成し、DaggerAppComponent
を内部オブジェクトとしてインポートし、同じ結果が生じたことです。
外部でコンポーネントの初期化を行う必要はありません。だから、他の代替ソリューションがありますか、私は何を間違っていますか?.
Build.gradleに kapt processor が必要です:
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'
...
}
この拡張機能は、短剣のコードを生成します。
さらに、新しいgradleバージョンの場合、build.gradleでプラグインを適用することもできます。
apply plugin: 'kotlin-kapt'
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'
...
}
このプロジェクト を参照して確認できます
この変更がいつ発生したかはわかりませんが、1.1.2のKotlin gradleプラグインでこれを置き換えます(モジュールのbuild.gradle
):
kapt {
generateStubs = true
}
これとともに:
apply plugin: 'kotlin-kapt'
そして、annotationProcessor
を使用する依存関係をkapt
に置き換えてください。
たとえば、古い方法は次を使用することです。
annotationProcessor (
'some.library:one:1.0'
...
'some.library.n:n.0'
)
そして今、あなたは使用します:
kapt (
'some.library:one:1.0'
...
'some.library.n:n.0'
)
generateStubs
はもう機能しません。最新のKotlinを使用してビルドを作成すると、Android StudioのMessagesセクションここでは、 Dagger2 for Android およびKotlinの依存関係の最新リストを示します。
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'
}
この問題は、元の回答とは異なる以下の変更で修正できます
以下は、この問題を修正するのにも役立ちます
プラグイン付き
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"
参考のため、こちらをご覧ください Gist
DaggerComponent
に問題がある場合は、追加する必要があります
apply plugin: 'kotlin-kapt'
kapt {
generateStubs = true
}
build.gradle
itはdagger 2
のkotlin
コードを生成します。そうでない場合、プロジェクトはRebuild
のみでビルドされます