出现java.util.Base64类未找到报错,后端代码无法替换为android.util.Base64如何解决
报错根因
java.util.Base64 是JDK 8新增的API,Android系统仅在 API 26(Android 8.0)及以上版本 提供该类的原生支持。如果你的App最小兼容版本(minSdk)低于26,运行在低版本Android设备上就会触发类找不到的异常。
可行解决方案(无需修改后端通用业务代码)
- 方案1:调整App最低兼容版本
若业务允许仅覆盖Android 8.0及以上用户,直接修改模块build.gradle文件中的minSdk参数为26即可,无需修改任何业务代码,系统原生支持java.util.Base64调用。 - 方案2:新增同名兼容类覆盖系统实现
在你的Android项目源码中新建java.util包,将OpenJDK中Base64类的完整实现复制到该包下。App运行时会优先加载项目内的类,自动覆盖系统缺失的实现,原有业务代码的导入、调用逻辑完全不需要修改。 - 方案3:编译期字节码替换
接入ASM、Byte Buddy或Gradle Transform API,在编译打包阶段全局把所有对java.util.Base64的调用替换为android.util.Base64的对应实现,上层业务无感知。
其中Base64.getEncoder().encodeToString(macData)的等价Android实现为Base64.encodeToString(macData, Base64.NO_WRAP),替换时注意参数匹配即可。 - 方案4:引入第三方Base64依赖做全局适配
引入commons-codec等第三方成熟Base64实现库,调整依赖优先级让后端业务模块优先加载第三方库的Base64实现,不需要修改原有调用逻辑。
内容的提问来源于stack exchange,提问作者Ali Slim
相关产品推荐
相关产品推荐

