英文:
Build error during adding Hilt to the project
问题
我试图为我的MVVM项目添加Hilt支持。我正在使用这个教程。但是我遇到了这样的错误:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
> java.lang.reflect.InvocationTargetException (no error message)
我的build.gradle(app):
buildscript {
ext.kotlin_version = '1.3.71'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
}
}
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'com.google.gms.google-services'
id 'com.google.firebase.crashlytics'
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin'
id 'org.jetbrains.kotlin.android'
}
apply plugin: 'kotlin-parcelize'
apply plugin: 'kotlinx-serialization'
android {
// ...
compileSdkVersion 33
// ...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
dependencies {
// ...
implementation "com.google.dagger:hilt-android:2.45"
kapt "com.google.dagger:hilt-android-compiler:2.38.1"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
kapt "androidx.hilt:hilt-compiler:1.0.0"
}
和项目的build.gradle:
buildscript {
// ...
dependencies {
classpath 'com.android.tools.build:gradle:8.0.0'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20'
classpath 'com.google.gms:google-services:4.3.15'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5'
classpath "com.google.dagger:hilt-android-gradle-plugin:2.41"
}
}
// ...
我有这样的VM:
@HiltViewModel
class AppViewModel @Inject constructor(private val mainRepository: MainRepository) : ViewModel() {
// ...
}
带有存储库的:
class MainRepository @Inject constructor(private val retrofitService: RetrofitService) {
// ...
}
和这样的提供者:
@Module
@InstallIn(SingletonComponent::class)
object ApiModule {
@Provides
fun provideWeatherService(@ApplicationContext context: Context): RetrofitService {
// ...
}
}
而且我还在我的片段中添加了:
@AndroidEntryPoint
class PersonalPage : Fragment(R.layout.fragment_personal_page) {
// ...
}
但我不确定问题是否在添加类注解附近。所以除了这些提供者之外,我需要添加什么来获取可构建和可工作的项目?
更新
在日志中找到了这样的错误:
error: [Hilt]
Unsupported metadata version. Check that your Kotlin version is >= 1.0: java.lang.IllegalStateException: Unsupported metadata version. Check that your Kotlin version is >= 1.0
但在哪里是Kotlin版本?
英文:
I'm trying to add Hilt support for my MVVM project. I'm using this tutorial. But I got such error:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
> java.lang.reflect.InvocationTargetException (no error message)
my build.gradle (app):
buildscript {
ext.kotlin_version = '1.3.71'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
}
}
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'com.google.gms.google-services'
id 'com.google.firebase.crashlytics'
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin'
id 'org.jetbrains.kotlin.android'
}
apply plugin: 'kotlin-parcelize'
apply plugin: 'kotlinx-serialization'
android {
...
compileSdkVersion 33
....
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
dependencies {
....
implementation "com.google.dagger:hilt-android:2.45"
kapt "com.google.dagger:hilt-android-compiler:2.38.1"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
kapt "androidx.hilt:hilt-compiler:1.0.0"
}
and build.gradle for project:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:8.0.0'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20'
classpath 'com.google.gms:google-services:4.3.15'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5'
classpath "com.google.dagger:hilt-android-gradle-plugin:2.41"
}
}
...
I have such VM:
@HiltViewModel
class AppViewModel @Inject constructor(private val mainRepository: MainRepository) : ViewModel() {
...
}
with repository:
class MainRepository @Inject constructor(private val retrofitService: RetrofitService) {
...
}
and such providers:
@Module
@InstallIn(SingletonComponent::class)
object ApiModule {
@Provides
fun provideWeatherService(@ApplicationContext context: Context): RetrofitService {
val client = OkHttpClient.Builder()
.addInterceptor(AppInterceptor(context))
.connectTimeout(100, TimeUnit.SECONDS)
.dispatcher(Dispatcher().apply {
maxRequests = 1
})
.readTimeout(100, TimeUnit.SECONDS).build()
client.dispatcher.cancelAll()
val retrofit = Retrofit.Builder()
.baseUrl(BuildConfig.API_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build()
return retrofit.create(APIService::class.java)
}
}
and also I added to my fragment:
@AndroidEntryPoint
class PersonalPage : Fragment(R.layout.fragment_personal_page) {
...
But I'm not sure that the problem is near adding class annotations. So what I need to add except these providers for getting buildable and workable project?
UPDATE
Found in logs such error -
error: [Hilt]
Unsupported metadata version. Check that your Kotlin version is >= 1.0: java.lang.IllegalStateException: Unsupported metadata version. Check that your Kotlin version is >= 1.0
but where is kotlin version is?
答案1
得分: 0
最终,经过大量的谷歌搜索,我发现在某些 Hilt 版本中,与 Kotlin 版本可能会出现此问题。对我来说,最佳的依赖配置是:
dependencies {
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
kapt "androidx.hilt:hilt-compiler:1.0.0"
kapt("org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.5.0")
implementation 'com.google.dagger:hilt-android:2.38.1'
kapt 'com.google.dagger:hilt-compiler:2.38.1'
....
}
并且需要添加到类路径中:
classpath "com.google.dagger:hilt-android-gradle-plugin:2.38.1"
然后一切都开始正常工作。
英文:
So finally after huge googling I found that in some Hilt versions such problem can happen with Kotlin versions. For me the best configuration with dependencies is:
dependencies {
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
kapt "androidx.hilt:hilt-compiler:1.0.0"
kapt("org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.5.0")
implementation 'com.google.dagger:hilt-android:2.38.1'
kapt 'com.google.dagger:hilt-compiler:2.38.1'
....
}
with adding to classpath:
classpath "com.google.dagger:hilt-android-gradle-plugin:2.38.1"
and all started working well
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论