Android项目中Hilt报错:AppModule无法解析LocationTracker类
Hilt编译报错:ModuleProcessingStep无法处理AppModule,LocationTracker无法解析
问题描述
在Android项目中使用Hilt框架,添加GPS追踪相关类后出现编译报错:
ModuleProcessingStep无法处理'com.**.di.AppModule',原因是'LocationTracker'无法解析
但LocationTracker类确实存在且已在AppModule中完成导入。
相关代码
AppModule代码
@Module @InstallIn(SingletonComponent::class) object AppModule { @Provides fun provideRetrofit(): Retrofit { return Retrofit.Builder() .baseUrl(AppConfig.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build() } @Provides @Singleton fun provideApiService(retrofit: Retrofit): ApiService = retrofit.create(ApiService::class.java) @Provides @Singleton fun providesFusedLocationProviderClient( application: Application ): FusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(application) @Provides @Singleton fun providesLocationTracker( fusedLocationProviderClient: FusedLocationProviderClient, application: Application ): LocationTracker = DefaultLocationTracker( fusedLocationProviderClient = fusedLocationProviderClient, application = application ) }
LocationTracker与DefaultLocationTracker代码
interface LocationTracker { suspend fun getCurrentLocation(): Location? } class DefaultLocationTracker( private val fusedLocationProviderClient: FusedLocationProviderClient, private val application: Application ) : LocationTracker { @OptIn(ExperimentalCoroutinesApi::class) override suspend fun getCurrentLocation(): Location? { val hasAccessFineLocationPermission = ContextCompat.checkSelfPermission( application, android.Manifest.permission.ACCESS_FINE_LOCATION ) == PackageManager.PERMISSION_GRANTED val hasAccessCoarseLocationPermission = ContextCompat.checkSelfPermission( application, android.Manifest.permission.ACCESS_COARSE_LOCATION ) == PackageManager.PERMISSION_GRANTED val locationManager = application.getSystemService( Context.LOCATION_SERVICE ) as LocationManager val isGpsEnabled = locationManager .isProviderEnabled(LocationManager.NETWORK_PROVIDER) || locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) if (!isGpsEnabled && !(hasAccessCoarseLocationPermission || hasAccessFineLocationPermission)) { return null } return suspendCancellableCoroutine { cont -> fusedLocationProviderClient.lastLocation.apply { if (isComplete) { if (isSuccessful) { cont.resume(result) {} // Resume coroutine with location result } else { cont.resume(null) {} // Resume coroutine with null location result } return@suspendCancellableCoroutine } addOnSuccessListener { cont.resume(it) {} // Resume coroutine with location result } addOnFailureListener { cont.resume(null) {} // Resume coroutine with null location result } addOnCanceledListener { cont.cancel() // Cancel the coroutine } } } } }
解决办法
- 修复语法错误:
DefaultLocationTracker中suspendCancellableCoroutine的lambda参数写成了cont -,正确写法是cont ->。这个语法错误会导致类编译失败,直接引发Hilt无法解析LocationTracker的问题。 - 验证包导入与类可见性:确认
LocationTracker和DefaultLocationTracker的包路径正确,AppModule中的导入语句无误;同时确保这两个类为public(Kotlin默认public,不要用internal修饰)。 - 清理并重建项目:执行
Build -> Clean Project,再执行Build -> Rebuild Project,或者删除项目根目录下的.gradle和build文件夹后重新编译,清除编译缓存。 - 检查Hilt配置:确保Module级别的
build.gradle中正确配置了Hilt依赖和注解处理器:plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' id 'dagger.hilt.android.plugin' } dependencies { implementation "com.google.dagger:hilt-android:2.48" kapt "com.google.dagger:hilt-android-compiler:2.48" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3" }
内容的提问来源于stack exchange,提问作者maxxxo
相关产品推荐
相关产品推荐

