Android升级Chipmunk后Hilt+kapt构建报错::app:kaptDebugKotlin执行失败
Android Studio Chipmunk升级后Hilt kapt构建失败
将Android Studio升级至Chipmunk(2021.2.1)版本后,多个使用Hilt做依赖注入的Android项目构建时均触发如下报错:
执行任务':app:kaptDebugKotlin'失败。
执行org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction时发生失败,抛出java.lang.reflect.InvocationTargetException(无错误信息)
已在仅包含基础依赖注入逻辑的示例应用中复现该问题,相关代码如下:
根目录build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { allprojects { repositories { google() mavenCentral() maven { url 'https://jitpack.io' } } } dependencies { // Hilt Classpath for Java classpath 'com.google.dagger:hilt-android-gradle-plugin:2.38.1' } } plugins { id 'com.android.application' version '7.2.1' apply false id 'com.android.library' version '7.2.1' apply false id 'org.jetbrains.kotlin.android' version '1.7.10' apply false } task clean(type: Delete) { delete rootProject.buildDir }
app模块build.gradle
apply plugin: 'com.android.application' apply plugin: 'org.jetbrains.kotlin.android' apply plugin: 'kotlin-kapt' apply plugin: 'dagger.hilt.android.plugin' android { compileSdk 32 defaultConfig { applicationId "com.example.hiltkotlinpractice" minSdk 21 targetSdk 32 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled 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' } } dependencies { implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' implementation("com.google.dagger:hilt-android:2.38.1") kapt("com.google.dagger:hilt-android-compiler:2.38.1") kapt 'androidx.hilt:hilt-compiler:1.0.0' }
App.kt
@HiltAndroidApp class App: Application()
AppModule.kt
@Module @InstallIn(ActivityComponent::class) class AppModule { @Provides fun provideInterface(): APIProvider { return APIProvider() } }
Repo.kt
class Repo @Inject constructor( val apiProvider: APIProvider ) { fun get() = apiProvider.getData() }
MainActivity.kt
@AndroidEntryPoint class MainActivity : AppCompatActivity() { private val TAG = "MainActivity" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val repo = Repo(APIProvider()) Log.d(TAG, repo.get()) } }
解决方案
1. 升级Hilt版本至兼容版本
Hilt 2.38.1与Kotlin 1.7.10、AGP 7.2.1存在兼容性问题,建议将Hilt升级至2.40.5或更高版本,同时保持插件与依赖版本一致:
修改根目录build.gradle中的classpath:
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.40.5'
修改app模块build.gradle中的依赖:
implementation("com.google.dagger:hilt-android:2.40.5") kapt("com.google.dagger:hilt-android-compiler:2.40.5")
2. 启用kapt增量编译(可选)
在app模块build.gradle的android块中添加kapt配置,提升编译稳定性:
kapt { useBuildCache = true incremental = true }
3. 修正代码中的依赖注入误用
MainActivity中手动实例化Repo(APIProvider())违背了Hilt的依赖注入原则,应该通过Hilt注入Repo:
@AndroidEntryPoint class MainActivity : AppCompatActivity() { private val TAG = "MainActivity" @Inject lateinit var repo: Repo override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) Log.d(TAG, repo.get()) } }
4. 清理并重新构建项目
执行以下操作确保缓存被清除:
- 点击Android Studio工具栏的
File -> Invalidate Caches... -> Invalidate and Restart - 执行命令行:
./gradlew clean build
内容的提问来源于stack exchange,提问作者SYED AHMED KAMAL
相关产品推荐
相关产品推荐

