【问题标题】:Android Library, Kotlin and Dagger2Android 库、Kotlin 和 Dagger2
【发布时间】:2025-11-25 05:20:12
【问题描述】:

我正在构建一个包含两个模块的应用程序:核心模块,即 Android 库 (com.android.library) 和应用程序模块 (com.android.application)。

在我将 Java 文件转换为 Kotlin 后,项目没有编译,给我一个错误,即找不到生成的 Dagger 2 文件(未解决的引用)。但是目前正在生成的那些文件是:

...core\build\generated\source\kapt\release{my\core\namespace}\DaggerBaseComponent.java


我错过了什么?


build.gradle(核心模块)

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

...

android {
    ...
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

dependencies {
    ...
    // Dagger.
    kapt "com.google.dagger:dagger-compiler:2.10"
    compile 'com.google.dagger:dagger:2.10'
    provided 'javax.annotation:jsr250-api:1.0'

    // Kotlin
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}


build.gradle(应用程序模块)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

...

android {
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

dependencies {
    ...
    // Dagger.
    kapt "com.google.dagger:dagger-compiler:2.10"
    compile 'com.google.dagger:dagger:2.10'
    provided 'javax.annotation:jsr250-api:1.0'

    // Kotlin
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}


build.gradle(项目)

buildscript {
    ext.kotlin_version = '1.1.2-3'
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.2'

        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}


ApplicationContext.kt(我的核心模块)

class ApplicationContext : Application() {
    var baseComponent: BaseComponent? = null
        private set

    override fun onCreate() {
        super.onCreate()

        initializeInjector()
    }

    private fun initializeInjector() {
        // DaggerBaseComponent is and unresolved reference
        baseComponent = DaggerBaseComponent.builder() 
                .appModule(AppModule(this))
                .endpointModule(EndpointModule())
                .build()
    }

    companion object {

        operator fun get(context: Context): ApplicationContext {
            return context.applicationContext as ApplicationContext
        }
    }
}

【问题讨论】:

    标签: android kotlin android-library dagger-2 kapt


    【解决方案1】:

    Java 模块应该有

    plugins {
        id("java-library")
        id("kotlin")
        id("kotlin-kapt")
    }
    
    java {
        sourceSets {
            main.java.srcDirs += ['build/generated/source/kapt/main']
        }
    }
    

    【讨论】:

      【解决方案2】:

      问题是 Gradle 没有找到由 kapt 生成的 Dagger 文件,因此我通过在我的 Core 模块 (lib) 上的 sourceSets 配置中添加 src/main/kapt 解决了这个问题:

      build.gradle(核心模块)

      android {
          ...
          sourceSets {
              main.java.srcDirs += ['src/main/kotlin', 'src/main/kapt']
          }
      }
      


      之后,Core 模块开始查找 Dagger 2 生成的文件。

      【讨论】: