Kotlin y Dagger2

Estoy tratando de agregar Kotlin a mi proyecto, pero después de habilitar Kotlin no puedo build ya que las classs Dagger2 ya no se generan. Intenté un segundo proyecto, y tengo el mismo problema (en realidad es peor, se queja tanto de Dagger2 como de DataBinding).

Estos son los cambios que he hecho para habilitar a Kotlin:

Proyecto build.gradle:

diff --git a/build.gradle b/build.gradle index 486700c..91e4cda 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,15 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + ext.kotlin_version = '1.0.5-3' repositories { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0-alpha2' + classpath 'com.android.tools.build:gradle:2.3.0-beta1' classpath 'com.google.gms:google-services:3.0.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files 

Aplicación build.gradle:

 diff --git a/app/build.gradle b/app/build.gradle index 345dab0..e59f91c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' -apply plugin: 'com.neenbedankt.android-apt' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-kapt' android { compileSdkVersion 25 @@ -39,6 +40,13 @@ android { incremental true javaMaxHeapSize "5g" } + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } +} + +kapt { + generateStubs = true } dependencies { @@ -71,11 +79,15 @@ dependencies { compile 'com.artemzin.rxjava:proguard-rules:1.2.1.0' // Dagger 2 - apt 'com.google.dagger:dagger-compiler:2.7' - testApt 'com.google.dagger:dagger-compiler:2.7' + kapt 'com.google.dagger:dagger-compiler:2.7' + //testApt 'com.google.dagger:dagger-compiler:2.7' compile 'com.google.dagger:dagger:2.7' provided 'javax.annotation:jsr250-api:1.0' + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } apply plugin: 'com.google.gms.google-services' +repositories { + mavenCentral() +} 

El error ocurre aquí:

 sObjectGraph = DaggerObjectGraph .builder() .appModule(new AppModule(context.getApplicationContext())) .build(); 

donde DaggerObjectGraph ya no está definido.

Cualquier ayuda sería muy apreciada.

Solo eliminar

 kapt { generateStubs = true } 

El problema es que estás usando

DaggerObjectGraph

que ya no está disponible en dagger2.

Aquí está la documentation para daga 2 .

Esta es una versión funcional

en su nivel de aplicación build.gradle agregue lo siguiente bajo el cierre de las dependencies

  compile "com.google.dagger:dagger:2.9" kapt "com.google.dagger:dagger-compiler:2.9" provided 'javax.annotation:jsr250-api:1.0' 

también agregue esto al mismo file

 kapt { generateStubs = true } 

Luego crea los componentes y las classs de modules e inyecta en cualquier actividad o fragment que desees.

Aquí hay una class de componente de ejemplo

 @Singleton @Component(modules = arrayOf(AppModule::class, NetModule::class)) interface AppComponent { fun gson() : Gson fun retrofit(): Retrofit fun okHttpClient(): OkHttpClient } 

Aquí hay una class de Módulo de muestra

 @Module class AppModule(internal var mApplication: Application) { @Provides @Singleton fun providesApplication(): Application { return mApplication } } 

En mi class de aplicación

 class App : Application() { companion object { @JvmStatic lateinit var component: AppComponent } override fun onCreate() { super.onCreate() appComponent = DaggerAppComponent.builder() .appModule(AppModule(this)) .netModule(NetModule(Constants.BASE_URL)) .build() } } 

Así es como los componentes daga se inicializan en daga 2. Ahora puede crear subcomponentes para diferentes actividades o fragments e inyectarlos.

  • ¿Cómo usar la expresión Lamba para hacer que las llamadas al método Java sean less detalladas en Kotlin?
  • OnClick y TextView en Android Studio 3
  • antes en Kotlin
  • La sala no puede elegir un constructor ya que varios constructores son un error adecuado
  • Kotlin marcó excepciones alternativa
  • ¿Kotlin apoya la comprensión monádica?
  • Kotlin: elementos condicionales durante la creación del map
  • Usando las properties sintéticas de Kotlin
  • El lanzamiento inteligente a 'Boolean' es imposible después de la afectación del valor
  • Kotlin: ¿cómo devolver algún valor del scope?
  • Expresión en Kotlin