You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Hilt在API Level 18(Jelly Bean)设备上崩溃问题求助

解决方案:Jelly Bean设备上Hilt+OkHttp的VerifyError修复

嘿,我之前维护兼容低版本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

火山引擎 最新活动