java - 如何在 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 生成的类,其次,如何从生成的类中删除上述错误?
解决方案
在您的 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()
推荐阅读
- javascript - 将新值推送到 React 挂钩中的嵌套数组
- html - 如何在与图片对齐的同时制作带有段落的标题?
- html - 当需要 POST 时,表单向 Flask 发送 GET 请求
- odbc - 使用 Redshift ODBC 驱动程序将值设置为 null 时出错
- c - 是否可以从另一个进程中释放泄漏的内存?
- html - adyen 支付挂载在 reactjs 中不起作用
- jquery - Jquery动画一个结束然后开始第二个
- c - 如何获取可用 wifi 连接的列表?
- asp.net-core - 我在 asp.net 核心 api 中找不到 IHttpControllerActivator
- php - 在 php 7.3 中使用 argon2 加密而不重新编译