Eclipse导出Android APK提示sun/misc/BASE64Encoder报错如何解决
Eclipse导出Android图标包APK报
sun/misc/BASE64Encoder错误修复方案 错误根因
该错误和你修改的图标包项目本身代码无关,是环境兼容性问题:
sun.misc.BASE64Encoder是Oracle JDK的内部私有API,JDK 9及以上版本做模块化改造后直接移除了该类,而老旧的Eclipse ADT插件在导出APK的签名、资源校验环节硬编码调用了这个私有类,运行时找不到对应类就会抛出该错误。
可落地修复方案
- 方案1:切换Eclipse运行时JDK为JDK 8(优先选择,稳定性最高)
这是适配老ADT开发环境成本最低的方案,操作步骤如下:- 下载安装和你当前Eclipse位数(32/64位)匹配的JDK 8版本,记录安装路径
- 关闭Eclipse,找到Eclipse安装根目录下的
eclipse.ini配置文件,用纯文本编辑器打开 - 在配置文件里的
-vmargs行之前添加两行配置,指定JDK 8的可执行文件路径,Windows环境示例:
macOS/Linux环境对应替换为自己JDK 8路径下的java可执行文件即可,注意路径分隔符统一用正斜杠,-vm C:/Program Files/Java/jdk1.8.0_391/bin/javaw.exe-vm参数必须放在-vmargs之前才会生效。 - 保存配置后重启Eclipse,右键项目打开Properties -> Java Compiler,确认编译合规级别设置为1.6或1.8,和JDK 8版本匹配,之后重新执行APK导出操作即可正常打包。
- 方案2:修改ADT插件的BASE64调用逻辑(不想降级JDK时使用)
如果你不想更换当前高版本JDK,可以手动修改ADT插件的字节码替换调用逻辑:- 打开Eclipse安装目录下的
plugins文件夹,找到ADT核心包,文件名格式一般为com.android.ide.eclipse.adt_版本号.jar,先备份该文件避免损坏。 - 用压缩软件打开该jar包,定位到签名、打包逻辑中调用
sun/misc/BASE64Encoder的类,将对应调用替换为JDK公开APIjava.util.Base64的编码器实现。 - 将修改后的文件重新打包为jar替换原文件,重启Eclipse即可。
*该方案需要修改字节码或重编译ADT插件,操作门槛较高,非特殊情况不优先选择。
- 打开Eclipse安装目录下的
- 方案3:命令行手动打包(临时测试验证用)
如果只是临时需要导出APK验证图标包效果,可以绕开Eclipse的导出流程,单独配置JDK 8环境变量,使用Android SDK自带的aapt、apkbuilder、jarsigner命令行工具依次完成资源打包、dex构建、签名流程,也能避开Eclipse运行时的类加载错误。
内容的提问来源于stack exchange,提问作者sven_s05
相关产品推荐
相关产品推荐

