要解决这个问题首先要明白dx.jar是干什么用的,我大概查了一下,是这么解释的:
dx.jar is part of the build process, used to convert Java bytecode into Dalvik bytecode.
也就是说dx.jar是一个进行构建的工具,是用来将java虚拟机字节码转换为安卓虚拟机字节码的工具。
The dx.jar was original located under android-sdk/platforms/android-X/tools/lib/ before (especially in android-3 and android-4), and moved to android-sdk/platform-tools/lib/ later. Unfortunately this has never documented in any official source, probably because it is part of internal tools which Google doesn’t want to consumer developer to be bothered. check out this blog to see the problem.
dx.jar包原来是在android-sdk/platforms/android-X/tools/lib/ 路径下的,后来改到android-sdk/platform-tools/lib/ 路径。但不幸的是,还没有任何官方的资源文档对他进行详细说明,可能因为dx.jar是内部工具的一部分,而google不想让开发者因此而受到困扰。。。还是没解释通。。。
导入新的项目报错:
Error:Android Dex: [xxx] Failed to load dx.jar Error:Android Dex: [xxx] java.lang.ClassNotFoundException: com.android.dx.command.DxConsole Error:Android Dex: [xxx] at java.net.URLClassLoader.findClass(URLClassLoader.java:381) Error:Android Dex: [xxx] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) Error:Android Dex: [xxx] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) Error:Android Dex: [xxx] at org.jetbrains.android.compiler.tools.AndroidDxRunner.loadDex(AndroidDxRunner.java:80) Error:Android Dex: [xxx] at org.jetbrains.android.compiler.tools.AndroidDxRunner.runDex(AndroidDxRunner.java:136) Error:Android Dex: [xxx] at org.jetbrains.android.compiler.tools.AndroidDxRunner.main(AndroidDxRunner.java:336) Error:Android Dex: [xxx] Exception in thread "main" java.lang.NullPointerException Error:Android Dex: [xxx] at org.jetbrains.android.compiler.tools.AndroidDxRunner.runDex(AndroidDxRunner.java:139)
------------------------------------------------------------------------
说加载不了dx.jar,是因为找不到这个类。很怪,包括网上查资料啥的都没找到具体原因是什么,后来根据看的别人的解答自己思考了一下,自己之前在编译文件的时候由于sdk tools版本过低,更新过几个新的sdk tools,是不是冲突导致的,。然后果断去 sdk manager里,然后选中 show Package details后, 把新下的2.6.0的禁用掉,再重新构建,问题解决了。。。。
我猜可能是因为,勾选了 多个sdk tools的版本后系统不知道应该选哪个合适,然后就报了找不到。。。其实我也不知道为啥,在此先做记录,后续找到原因再补上。