如何在Android Studio的Java库模块中使用Dagger?

我在 Android Studio 项目的 Java 库模块中使用 Dagger,该build.gradle模块的外观如下:


apply plugin: 'java-library'


dependencies {

    implementation fileTree(dir: 'libs', include: ['*.jar'])


    implementation 'com.google.dagger:dagger:2.24'

    annotationProcessor 'com.google.dagger:dagger-compiler:2.24'

}


sourceCompatibility = "7"

targetCompatibility = "7"

我可以看到 Dagger 正在正确生成实现,并且它们存在于build/generated/sources/annotationProcessor但由于某种原因我无法在代码中访问它们。package此外,生成的文件在语句中显示错误:


包名称“com.example.javamodule”与文件路径“java.main.com.example.javamodule”不对应


我在这里有两个问题。首先,如何在 java 模块代码中访问 Dagger 生成的类,其次,如何从生成的类中删除上述错误?


胡说叔叔
浏览 122回答 1
1回答

慕哥6287543

在您的 java 库的 gradle 文件中:plugins {    id 'java-library'    id 'kotlin'    id 'kotlin-kapt'}java {    sourceCompatibility = JavaVersion.VERSION_1_7    targetCompatibility = JavaVersion.VERSION_1_7}dependencies {    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"    //Dependency injection    implementation 'com.google.dagger:dagger:2.27'    kapt 'com.google.dagger:dagger-compiler:2.24'}然后创建一个类及其依赖项:class First@Injectconstructor(    private val second: Second,    private val third: Third) {    fun firstFunction() {        print(second.secondMessage())        print(third.name)    }}class Second(    private val name: String) {    fun secondMessage(): String {        return name    }}class Third(    val name: String)然后创建你的匕首模块:@Moduleclass ModuleUtil {    @Provides    fun providesSecond(): Second {        return Second("second")    }    @Provides    fun providesThird(): Third {        return Third("third")    }}然后创建你的匕首组件:@Singleton@Component(modules = [    ModuleUtil::class])interface MainComponent {    fun maker(): First}处理生成组件的对象:object DaggerWrapper {    lateinit var mainComponent: MainComponent    fun initComponent() {        mainComponent = DaggerMainComponent            .builder()            .build()    }}最后在你的应用程序 android 模块中(例如,在 Activity 中):DaggerWrapper.initComponent()            val mainComponent = DaggerWrapper.mainComponent            val first = mainComponent.maker()            first.firstFunction()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java