我正在尝试创建我的应用组件,但Dagger不会生成我的应用组件。 这是 MyApplication 类
class MyApplication : Application() {
companion object {
@JvmStatic lateinit var graph: ApplicationComponent
}
@Inject
lateinit var locationManager : LocationManager
override fun onCreate() {
super.onCreate()
graph = DaggerApplicationComponent.builder().appModule(AppModule(this)).build()
graph.inject(this)
}
}
这是我的 AppComponent 类
@Singleton
@Component(modules = arrayOf(AppModule::class))
interface ApplicationComponent {
fun inject(application: MyApplication)
}
这是 github
上的project这是错误日志
Error:(7, 48) Unresolved reference: DaggerApplicationComponent
Error:(28, 17) Unresolved reference: DaggerApplicationComponent
Error:Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details
Information:BUILD FAILED
Information:Total time: 21.184 secs
Error:e: .../MyApplication.kt: (7, 48): Unresolved reference: DaggerApplicationComponent
e: Unresolved reference: DaggerApplicationComponent
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Information:4 errors
Information:0 warnings
Information:See complete output in console
答案 0 :(得分:43)
我的解决方案是添加
apply plugin: 'kotlin-kapt'
并删除
kapt {
generateStubs = true
}
答案 1 :(得分:27)
请尝试启用stubs generation,这可能是在构建过程的这个阶段看不到类的原因。在您的build.gradle
文件中,顶级:
kapt {
generateStubs = true
}
答案 2 :(得分:21)
这有助于我解决这个问题
将其添加到build.gradle
apply plugin: 'kotlin-kapt'
在android
标记内添加
kapt {
generateStubs = true
}
然后替换
annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
到
kapt 'com.google.dagger:dagger-compiler:2.11'
现在Rebuild
项目
Build -> Rebuild project
答案 3 :(得分:6)
我已经下载了你的Github项目。谢谢分享!
您的问题的答案非常简单:
Build -> Rebuild project
Dagger依赖项文件将被重新创建,app会在任何问题后启动。
我已经使用Android Studio 2.1.2版本检查了这个。它的工作原理
答案 4 :(得分:3)
你应该删除
kapt {
generateStubs = true}
并添加到应用程序gradle文件的顶部
apply plugin: 'kotlin-kapt'
然后Dagger会照顾其余的事情:)
答案 5 :(得分:2)
混合Java / Kotlin项目只需要两个步骤:
apply plugin: 'kotlin-kapt'
添加到构建文件的顶部annotationProcessor 'com.google.dagger:dagger-compiler:2.14.1'
替换为kapt 'com.google.dagger:dagger-compiler:2.14.1'
答案 6 :(得分:1)
对于Java用户,解决方案只是重建您的项目。
答案 7 :(得分:1)
答案很简单:
Build -> Rebuild project
它对我有用。
答案 8 :(得分:1)
在我的情况下缺少kapt编译器依赖。请确保也具有以下依赖性。
kapt 'com.google.dagger:dagger-compiler:2.15'
app build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.usb.utility"
minSdkVersion 14
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.google.dagger:dagger-android:2.15'
compile 'com.google.dagger:dagger-android-support:2.15' // if you use the support libraries
kapt 'com.google.dagger:dagger-android-processor:2.15'
kapt 'com.google.dagger:dagger-compiler:2.15'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
答案 9 :(得分:1)
将其添加到build.gradlle顶部
apply plugin: 'kotlin-kapt'
在依赖项中添加
kapt 'com.google.dagger:dagger-compiler:2.15'
kapt 'com.google.dagger:dagger-android-processor:2.15'
之后,重建您的项目。我希望它能工作。 谢谢
答案 10 :(得分:0)
请尝试将此添加到您的build.gradle
android {
dexOptions {
incremental false
}
编辑:显然一年之后如果您不申请kotlin-kapt
插件,就会发生这种情况。另外,请确保使用kapt
代替annotationProcessor
。
答案 11 :(得分:0)
就我而言,我做了所有答案,但没有解决!
我的解决方案:转到项目的目录路径并删除
build
,app>build
,.idea
,.Gradle
并返回android studio并rebuild
进行项目并完成!
答案 12 :(得分:-1)
这必须解决您的问题:
在build.gradle
块内的应用级 dependencies
内,添加以下行:
//dagger2
api 'com.google.dagger:dagger:2.24'
api 'com.google.dagger:dagger-android:2.24'
api 'com.google.dagger:dagger-android-support:2.24'
annotationProcessor 'com.google.dagger:dagger-compiler:2.24'
kapt 'com.google.dagger:dagger-compiler:2.24'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.24'
kapt 'com.google.dagger:dagger-android-processor:2.24'
compileOnly 'javax.annotation:jsr250-api:1.0'
implementation 'javax.inject:javax.inject:1'
应用级的android
内,
build.gradle
在应用程序级别 kapt {
generateStubs = true
}
的顶部处,以完全低于顺序的方式进行操作。
build.gradle
最后,您需要按照下面的屏幕快照中的说明配置注释过程。您可以进行apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
搜索File>Other Settings>Settings for New Projects>
此后,请从菜单"Annotation processor"
中进行操作。你完成了!
测试:
Build > Rebuild
现在,您可以使用在编译时为Applicati @Component
public interface ApplicationComponent {
}
nComponent接口生成的DaggerApplicationComponent
。
o