Android抛出ClassNotFoundException求助:Sugar 1.5库异常排查
这个ClassNotFoundException针对android.app.job.JobServiceEngine的问题,大概率和API版本兼容性以及你使用的Sugar ORM 1.5版本的局限性有关,我来拆解几个核心触发原因:
API版本不匹配:JobServiceEngine是Android 8.0(API 26)专属类
android.app.job.JobServiceEngine是Android 8.0系统才新增的系统类,而Sugar ORM 1.5版本发布于2017年,内部逻辑可能直接引用了这个类却没有做低版本兼容判断。如果你的项目minSdkVersion设置低于26,在API 26以下的设备上运行时,系统找不到这个类就会抛出异常。你可以先检查Module级build.gradle里的minSdkVersion配置,这是最常见的触发点。Dex分包或混淆配置不当导致类缺失
如果你开启了D8/R8混淆或者multiDexEnabled true的分包模式,但配置有误,可能会导致JobServiceEngine相关的类没有被打包进主Dex文件。应用启动阶段如果需要加载Sugar库的相关逻辑,而该类在非主Dex中未被及时加载,就会触发这个异常。Sugar ORM版本过老的兼容性缺陷
Sugar ORM 1.5属于较老旧的版本,后续更新的版本(比如1.6及以上)已经修复了这类低版本API兼容问题。老版本库没有针对低版本Android系统做兼容处理,硬引用了高版本系统类,自然会在低版本设备上崩溃。
快速解决建议
- 优先升级Sugar ORM到最新稳定版本,替换依赖为:
implementation 'com.github.satyan:sugar:1.6.4' - 如果无法升级库,可将项目
minSdkVersion提升至26及以上 - 检查Dex分包配置,通过
multiDexKeepProguard文件指定保留Sugar相关类,确保核心类被打包进主Dex
内容的提问来源于stack exchange,提问作者aex

