为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

胡说叔叔 2023-11-10 16:22:40
我在 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 生成的类,其次,如何从生成的类中删除上述错误?
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

在您的 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

@Inject

constructor(

    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

)

然后创建你的匕首模块:


@Module

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


查看完整回答
反对 回复 2023-11-10
  • 1 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信