本片博文主要解决在Eclipse上开发Android遇到的两个问题。
今天在引入一个同事给我的Android工程后,编译时出现两个错误,分别是dex.force.jumbo和Java heap space的问题,具体如下。
1、dex.force.jumbo的问题,详情如下:
Unable to execute dex: Cannot merge new index 66460 into a non-jumbo instruction!
Conversion to Dalvik format failed: Unable to execute dex: Cannot merge new index 66460 into a non-jumbo instruction!
解决方法是在project.properties文件中添加dex.force.jumbo=true,然后清理工程,并重新编译。
这个问题主要是项目在升级ADT和SDK Tool之后的Eclipse中编译时出现,它是在将jar文件转换成dex文件的时候出错的。
遗留问题是:新的ADT和SDK Tool在将jar转化成dex的时候,可能会合并类的代码,这将导致巨大的类;类中的每一个方法都分配有一个id,字节码中以id标识和调用方法;早期的Dalvik VM内部使用short类型变量来标识方法的id,最大
值限制在65535;综合上述因素,代码在安装的时候,在某些机器上不能通过验证,所以安装失败。
遗留问题解决:删掉没有实际使用的代码,或者使用ProGuard处理代码(可以减小代码体积)。
2、Java heap space的问题,详情如下:
Unable to execute dex: Java heap space
Java heap space
解决方法一:增加内存,吧Eclipse目录下的eclipise.ini文件内容改为如下:
-vm
C:\Program Files\Java\jre6\bin\javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120913-144807
-product
com.android.ide.eclipse.adt.package.product
--launcher.XXMaxPermSize
512m
-showsplash
com.android.ide.eclipse.adt.package.product
--launcher.XXMaxPermSize
512m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms512m
-Xmx1024m
-XX:MaxPermSize=256m
-Declipse.buildId=v22.0.1-685705
然后关闭eclipse,在cmd中执行eclipse -clean,清理工程,再编译运行。
解决方法二:在添加jar包的时候,使用引用的方式,右键工程->build path->add Library->user Library->user Libraries->new->随便取个名字->add JARs->ok。如果你要添加现成的jar包,例如classes.jar,则右键工程->build path->add external archives