Ответ 1
Мое решение состоит в том, чтобы добавить
apply plugin: 'kotlin-kapt'
и удалите
kapt {
generateStubs = true
}
Я пытаюсь создать свой компонент приложения, но 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
здесь находится журнал ошибок
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
Мое решение состоит в том, чтобы добавить
apply plugin: 'kotlin-kapt'
и удалите
kapt {
generateStubs = true
}
Попробуйте включить создание заглушек, это может быть причиной того, что класс не отображается на этом этапе процесса сборки. В вашем файле build.gradle
верхний уровень:
kapt {
generateStubs = true
}
Это помогло мне решить эту проблему.
Добавьте это в начало build.gradle
apply plugin: 'kotlin-kapt'
Внутри тега android
добавить
kapt {
generateStubs = true
}
И затем замените
annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
to
kapt 'com.google.dagger:dagger-compiler:2.11'
Теперь Rebuild
проект
Build -> Rebuild project
Я уже загрузил ваш проект Github. Спасибо, что поделились!
Ответ на ваш вопрос довольно прост:
Build -> Rebuild project
Файлы зависимостей кинжалов будут воссозданы, а приложение после запуска будет запущено с любой проблемой.
Я уже проверил это с версией Android Studio 2.1.2. Он работает
вы должны удалить
kapt {
generateStubs = true}
и добавьте в начало приложения gradle файл
apply plugin: 'kotlin-kapt'
тогда Кинжал позаботится об остальных:)
Для смешанных проектов Java/Kotlin необходимо выполнить всего два шага:
apply plugin: 'kotlin-kapt'
в начало файла сборкиannotationProcessor 'com.google.dagger:dagger-compiler:2.14.1'
на kapt 'com.google.dagger:dagger-compiler:2.14.1'
Также для пользователей Java решение состоит в том, чтобы просто перестроить ваш проект.
Ответ прост:
Build → Rebuild project
Меня устраивает.
В моем случае отсутствует зависимость компилятора капта. Пожалуйста, убедитесь, что у вас есть ниже зависимости тоже.
kapt 'com.google.dagger:dagger-compiler:2.15'
приложение 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'
}
Попробуйте добавить это в свой build.gradle
android {
dexOptions {
incremental false
}
EDIT: видимо, через год это может произойти, если вы не применяете плагин kotlin-kapt
. Также убедитесь, что вы используете kapt
вместо annotationProcessor
.
Добавьте это на вершине build.gradlle
применить плагин: 'kotlin-kapt'
Добавьте это в зависимости
kapt 'com.google.dagger:dagger-compiler:2.15'
kapt 'com.google.dagger:dagger-android-processor:2.15'