在做动态加载时有一步是要将jar 转化为dex,用到了dx工具。之前项目在Eclipse上生成jar包转化为dx很正常,但是最近把项目迁移到Android Studio上生成的jar在转化dx报了bad class file magic (cafebabe) or version (0033.0000)错误
在网上搜了一圈,得到的原因是生成jar包的jdk和进行dx化的jdk版本不同,也给出了解决办法,将java文件版本降低:
javac -source 1.6 -target 1.6 xx.Java
但是对我不适用,因为我这有上百个java文件需要降低版本,而且Android Studio上jdk版本是最新的1.8.因此推测从dx使用的jdk入手会有解决方法。我的dx工具是从网上下载的,以前只知道怎么用,不知道里面都有哪些东西,zip包里只包含了dx.bat,dex.jar。dx.bat中有一句:
set jarfile=dx.jar
而且后面的命令就是调用dx.jar,由于电脑上只安装了jdk1.8,通过环境变量获取到java版本也必是这个,唯一的可能就是dx.jar太旧,在sdk目录下的build-tools里面找到最新版本的dx替换,测试一下,正常!
而且之后在Stack Overflow上也找到了同样的解决办法: