Kotlin和Dagger2

时间:2016-12-24 05:25:56

标签: android kotlin dagger-2

我正在尝试将Kotlin添加到我的项目中,但是在启用Kotlin后我无法构建,因为Dagger2类不再生成。我尝试了第二个项目,我有同样的问题(实际上更糟糕的是,它抱怨Dagger2和DataBinding)。

这些是我为启用Kotlin所做的更改:

Project build.gradle:

ws.close()

App 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

错误发生在这里:

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()
+}

不再定义DaggerObjectGraph。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

只需删除

kapt {
    generateStubs = true
}

答案 1 :(得分:0)

问题是你正在使用

  

DaggerObjectGraph

在dagger2中不再可用。

Here is the documentation for dagger 2

这是一个有效的版本

在您的应用级别build.gradle中,在依赖关系

下添加以下内容
    compile "com.google.dagger:dagger:2.9"
    kapt "com.google.dagger:dagger-compiler:2.9"
    provided 'javax.annotation:jsr250-api:1.0'

也将此添加到同一个文件

kapt {
    generateStubs = true
}

然后创建组件和模块类,并注入您想要的任何活动或片段。

以下是组件类

的示例
@Singleton
@Component(modules = arrayOf(AppModule::class, NetModule::class))
interface AppComponent {

    fun gson() : Gson
    fun retrofit(): Retrofit
    fun okHttpClient(): OkHttpClient
}

这是一个示例模块类

@Module
class AppModule(internal var mApplication: Application) {

    @Provides
    @Singleton
    fun providesApplication(): Application {
        return mApplication
    }

}

在我的应用程序类

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()

}


}

这就是在匕首2中初始化匕首组件的方法。您现在可以为不同的活动或片段创建子组件并注入它们。