[英]How to use Dagger in Java library module in Android Studio?
我在 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
語句中顯示錯誤,指出:
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 及其依賴項:
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 來處理生成的組件:
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()
只需添加這些庫(輸入新的庫版本),然后用匕首啟動項目:)
//Dagger
implementation 'com.google.dagger:dagger:2.43.2'
annotationProcessor 'com.google.dagger:dagger-compiler:2.43.2'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.