AOSP中Hilt与Jetpack Compose集成启动报错的解决方法
以下是针对java.lang.NoClassDefFoundError: androidx.hilt.navigation.HiltViewModelFactory报错的具体解决步骤:
补全Android.bp中的依赖配置
HiltViewModelFactory类属于hilt-navigation库,而hilt-navigation-compose依赖该库但AOSP构建系统不会自动传递依赖,必须显式添加到static_libs中。同时要确保所有Hilt相关依赖版本一致:android_app { name: "MyApp", // 其他配置... static_libs: [ "androidx.hilt_hilt-android", "androidx.hilt_hilt-navigation-compose", "androidx.hilt_hilt-navigation", // 必须添加这个 "androidx.hilt_hilt-lifecycle-viewmodel", ], // 其他配置... }验证AAR包的版本与完整性
检查引入的所有Hilt相关AAR(hilt-android、hilt-navigation、hilt-navigation-compose)是否为同一版本,版本不匹配会导致类加载失败。确保AAR包完整,没有损坏或缺失类文件。检查混淆规则(若启用)
如果应用开启了ProGuard/R8混淆,需添加规则避免Hilt核心类被混淆移除:-keep class androidx.hilt.navigation.HiltViewModelFactory { *; } -keep class androidx.hilt.navigation.compose.HiltViewModelKt { *; } -keep class dagger.hilt.android.** { *; }在AOSP中可通过Android.bp的
proguard_flags字段配置这些规则。验证编译依赖与APK内容
执行m MyApp -n查看完整编译命令,确认hilt-navigation的AAR被正确引入;也可以解压APK,用dexdump工具检查classes.dex中是否存在androidx.hilt.navigation.HiltViewModelFactory类。确认Hilt初始化与导航组件使用规范
- 确保Application类添加了
@HiltAndroidApp注解,并在AndroidManifest.xml中正确声明。 - 确认使用
hiltNavHost()而非普通NavHost创建导航容器,hiltViewModel()需要依赖前者提供的Hilt兼容ViewModelStoreOwner。
- 确保Application类添加了
内容的提问来源于stack exchange,提问作者Zappy.Mans
相关产品推荐
相关产品推荐

