Android Hilt报错:无法获取AppModule元素 NullPointerException问题求助
错误信息
error: [Hilt] Could not get element for m.yaz.agh.pos.di.AppModule: java.lang.NullPointerException: Could not get element for m.yaz.agh.pos.di.AppModule
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:994)
at dagger.hilt.processor.internal.aggregateddeps.AggregatedDepsMetadata.getDependency(AggregatedDepsMetadata.java:195)
相关代码(AppModule)
package m.yaz.agh.pos.di import android.app.Application import android.content.Context import androidx.room.Room import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import m.yaz.agh.pos.data.db.PosDatabase import m.yaz.agh.pos.data.db.TransactionDao import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) object AppModule { @Singleton @Provides fun providePosDatabase(@ApplicationContext context: Context) = Room.databaseBuilder( context, PosDatabase::class.java, PosDatabase.DATABASE_NAME ).build() @Singleton @Provides fun provideTransactionDao(database: PosDatabase): TransactionDao = database.transactionDao() }
解决方案
清理编译缓存并重建项目
执行命令行./gradlew clean build,或者在Android Studio中依次点击Build -> Clean Project、Build -> Rebuild Project。这类空指针异常大多是编译缓存的元数据损坏导致的,清理后重新构建通常能解决。确保Hilt依赖版本完全一致
检查项目根目录build.gradle中的Hilt插件版本,以及模块build.gradle中的hilt-android、hilt-compiler版本,必须保持统一(比如都使用2.48或最新稳定版)。版本不匹配会导致注解处理器解析元数据时出现异常。检查依赖类的编译状态
确认PosDatabase类没有编译错误:比如DATABASE_NAME常量是否正确定义、transactionDao()方法是否存在且返回类型正确。如果依赖类本身编译失败,Hilt处理器无法解析AppModule的元数据,就会抛出这个空指针。验证Hilt注解的正确性
再次确认AppModule中的注解:@Module、@InstallIn必须来自dagger.hilt包,而非其他注解库@Singleton和@Provides的使用符合规范,比如提供的对象类型是可实例化的具体类(而非抽象类/接口,除非有其他Module提供实现)
临时禁用增量注解编译
在gradle.properties文件中添加android.enableIncrementalAnnotationProcessing=false,增量编译有时会导致注解处理器的缓存异常,禁用后重新构建排查问题。
内容的提问来源于stack exchange,提问作者AGH

