Hilt在API Level 18(Jelly Bean)设备上崩溃问题求助
嘿,我之前维护兼容低版本Android的应用时碰到过一模一样的问题!这个错误本质是Jelly Bean不支持Java 8+特性,而OkHttp和Hilt的依赖组合又引入了这些特性,再加上你的Desugar配置不够完善导致的。下面一步步给你解决:
1. 先搞懂崩溃原因
从栈信息看,Android10Platform是OkHttp为Android 10+设备做的实现,但OkHttp初始化时会尝试加载这个类,Jelly Bean的Dalvik虚拟机无法识别类里的Java 8语法(比如默认方法、Lambda),直接抛出了VerifyError。再加上你用的Hilt版本是早期测试版,代码生成逻辑也没考虑低版本设备的兼容。
2. 升级Desugar依赖并完善配置
你当前用的desugar_jdk_libs:1.0.10是很老的版本,对Java 8特性的支持不全,先升级到最新稳定版:
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
然后必须在Module的build.gradle里开启完整的Java 8编译支持,否则Desugar根本不会生效:
android { compileOptions { coreLibraryDesugaringEnabled true // 必须开启这个开关 sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } // Kotlin项目一定要加这个,否则Kotlin代码的Java 8特性不会被处理 kotlinOptions { jvmTarget = "1.8" } }
3. 升级OkHttp和Retrofit版本
你的Retrofit 2.8.1依赖的OkHttp版本是3.14.x,这个版本在Jelly Bean上配合旧Desugar容易出问题。建议升级到更稳定的版本,甚至可以明确指定OkHttp版本避免依赖冲突:
// 升级Retrofit到稳定版 implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // 指定OkHttp版本,4.9.x是支持Android 4.1+且兼容Desugar的稳定版 implementation 'com.squareup.okhttp3:okhttp:4.9.3'
如果升级后还是有问题,可以降级到OkHttp 3.12.13——这是最后一个不需要Desugar就能支持Android 4.x的OkHttp版本。
4. 升级Hilt到稳定版
你用的Hilt 2.28-alpha是早期测试版,存在不少低版本兼容问题,直接升级到最新稳定版:
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0" implementation 'com.google.dagger:hilt-android:2.44' kapt 'androidx.hilt:hilt-compiler:1.0.0' kapt 'com.google.dagger:hilt-android-compiler:2.44'
注意:升级后检查你的Application类是否正确加了
@HiltAndroidApp注解,所有Hilt注入的代码要符合最新规范,避免因为版本升级导致的其他问题。
5. 清理缓存重新编译
做完以上调整后,一定要清理项目缓存再重新编译,否则旧的编译产物还会导致问题:
- Android Studio里点击
Build -> Clean Project,然后Build -> Rebuild Project - 或者终端执行:
./gradlew clean assembleDebug
最后验证
把编译好的APK装到Jelly Bean测试机上,触发之前崩溃的场景(比如初始化Retrofit的地方),应该就不会再出现VerifyError了。
内容的提问来源于stack exchange,提问作者Vishal Pawar




