Hilt应用类问题:Gradle依赖冲突排查与解决
ClassName.canonicalName()找不到错误 开发Android项目时,未添加以下Hilt应用类可正常运行:
package com.app.bestride import android.app.Application import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp class BestRideApplication : Application() { // Empty for now }
添加该类后,出现如下错误:
Unable to find method ''java.lang.String com.squareup.javapoet.ClassName.canonicalName()'' 'java.lang.String com.squareup.javapoet.ClassName.canonicalName()' Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.) Re-download dependencies and sync project (requires network) The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem. Stop Gradle build processes (requires restart) Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project. In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.
项目的build.gradle(app)文件:
plugins { alias(libs.plugins.androidApplication) alias(libs.plugins.jetbrainsKotlinAndroid) alias(libs.plugins.daggerHilt) kotlin("kapt") } android { namespace = "com.app.bestride" compileSdk = 34 defaultConfig { applicationId = "com.app.bestride" minSdk = 24 targetSdk = 34 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary = true } } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.1" } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" } } } dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.ui) implementation(libs.androidx.ui.graphics) implementation(libs.androidx.ui.tooling.preview) implementation(libs.androidx.navigation.compose) implementation(libs.androidx.material3.android) implementation(libs.play.services.maps) implementation(libs.maps.compose) implementation(libs.hilt.android) implementation(libs.firebase.auth.ktx) kapt(libs.hilt.android.compiler) implementation(libs.androidx.hilt.navigation.compose) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.ui.test.junit4) debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) } // Ensure kapt settings are included kapt { correctErrorTypes = true }
对应的libs.versions.toml文件:
[versions] agp = "8.3.0" hiltAndroid = "2.44" hiltNavigationCompose = "1.2.0" javapoet = "1.13.0" kotlin = "1.9.0" coreKtx = "1.12.0" junit = "4.13.2" junitVersion = "1.1.5" espressoCore = "3.5.1" lifecycleRuntimeKtx = "2.7.0" activityCompose = "1.8.2" composeBom = "2023.08.00" mapsCompose = "4.3.3" material3Android = "1.2.1" navigationCompose = "2.7.7" playServicesMaps = "19.0.0" firebaseAuthKtx = "23.0.0" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hiltNavigationCompose" } hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hiltAndroid" } hilt-android-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hiltAndroid" } javapoet = { module = "com.squareup:javapoet", version.ref = "javapoet" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } androidx-ui = { group = "androidx.compose.ui", name = "ui" } androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-material3 = { group = "androidx.compose.material3", name = "material3" } androidx-material3-android = { group = "androidx.compose.material3", name = "material3-android", version.ref = "material3Android" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } maps-compose = { module = "com.google.maps.android:maps-compose", version.ref = "mapsCompose" } play-services-maps = { group = "com.google.android.gms", name = "play-services-maps", version.ref = "playServicesMaps" } firebase-auth-ktx = { group = "com.google.firebase", name = "firebase-auth-ktx", version.ref = "firebaseAuthKtx" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" } jetbrainsKotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } daggerHilt = { id = "com.google.dagger.hilt.android", version.ref = "hiltAndroid" }
已尝试以下操作但未解决问题:
- 清理并重建项目
- 清除缓存并重启Android Studio
- 重新下载依赖并同步项目
- 停止并重启Gradle构建进程
这个错误是Hilt版本与Javapoet版本不兼容导致的:Hilt 2.44依赖的Javapoet版本高于你指定的1.13.0,而ClassName.canonicalName()方法是在Javapoet 1.14.0及以上版本才新增的,低版本没有这个方法,所以Hilt注解处理器运行时找不到该方法。
解决步骤:
升级Javapoet版本
在libs.versions.toml的[versions]块中,将javapoet版本改为1.14.0或更高(Hilt 2.44适配的是1.14.0版本):javapoet = "1.14.0"移除手动声明的Javapoet依赖(可选)
如果你没有直接使用Javapoet的API,完全可以从libs.versions.toml的[libraries]中删除javapoet条目,让Gradle自动引入Hilt依赖的兼容版本,彻底避免版本冲突。同步项目并重新构建
完成版本修改后,点击Android Studio右上角的"Sync Project with Gradle Files"按钮同步项目,然后执行Clean Project+Rebuild Project。
额外验证(若问题仍存在):
执行以下Gradle命令查看项目依赖树,定位是否有其他依赖引入了旧版本的Javapoet:
./gradlew app:dependencies
找到所有包含javapoet的依赖项,确保最终解析的版本是1.14.0及以上。
内容的提问来源于stack exchange,提问作者Aashish Ace

