编译Jars并将它们添加到android项目中

时间:2011-05-27 00:44:34

标签: java android eclipse jar dx

好的就是这件事,我把它放进去,搜索所有的数据库,所以要么我没有搜索正确的单词,要么没有答案,希望“尚未”。

症状: - 编译Android项目DX每次构建项目时都会编译所有jar文件 - 没有理由这样做一次应该足够了,不管它每次都这样做,每次构建都需要很长时间而不需要花费几秒钟分钟。

真正的问题:

- 添加几个Jars导致eclipse崩溃 - 现在这是使用这些设置(重罐)  -Xms256m  -Xmx1024m  -XX:+ UseParallelGC  -XX:PermSize = 256M  -XX:MaxPermSize参数= 512M

(这实际上提供了更好的性能,所以如果你的eclipse编译速度慢,你可以添加-XX:+ UseParallelGC它会有帮助)(我无法设置它比这更高,java堆大小达到750m时eclipse崩溃,gc当DX编译一个jar时不起作用,它在两者之间尝试,但是CPU很忙,不能让它,所以当它到达第五个每个3MB的罐子时,堆上有600MB的东西,这就是为什么我用gcoverheadlimit)

将它们中的每一个或几个编译在一起将编译得很好(在同一个android项目中),问题是我找不到单独编译它们的方法(然后我需要在客户端设备上安装apks),当我将它们编译在一起时,Eclipse崩溃。

我尝试使用cmd和DX一个接一个地编译它们,虽然它是构建的,当我在eclispe中构建项目时它重建它,所以它就像我什么也没做,试图将罐子转移到DEX文件中,没有没帮忙。

我发了很多关于java堆大小的帖子,这不是我的情况我甚至使用gcoverheadlimit,太多的罐子导致它崩溃,如果有人有想法/解决方案我会向他/她致敬......

总结一下: 我想将java常规jar转换为Dalvik格式,然后将其作为资源添加到android项目中,因此当项目被编译时,它不需要将jar转换为Dalvik格式,因为它已经完成。

3 个答案:

答案 0 :(得分:2)

经过长时间的研究后,我认为我知道这是什么问题,但我不知道如何解决它。

症状:编译大jar和/或几个jar,导致eclipse崩溃,当它没有崩溃错误消息:写输出时出错:opcode == null,转换为Dalvik格式失败,错误2。

原因:DX无法处理超过16bit字符串的数据,因此,无法包含(至少不是平均时间)超过此字符串的长度。

结果:无法将Android的复杂应用程序编程为一个APK。

对Android开发人员的建议(我不太确定你是如何构建它的):你可以对这些字符串使用arraylist,每个字符串依次将自己写入classes.dex文件,然后,就会有为一个APK编写代码的限制,和/或添加开发人员需要的罐子数量,这是一个假设,使它不容易但也不太复杂,绝对不是那些制造Android的人,同意? / p>

解决方法:抱歉,但我还没有解决方法,我花了一些时间来解决这个问题,因为eclipse崩溃了,我没有得到“opcode == null”,错误消息所以我认为这是一个日食问题,我很高兴得到关于这个的第二和第三意见。

答案 1 :(得分:0)

构建JAR后,将它们添加为外部JAR ...

在Eclipse中选择“项目”菜单 - > '属性'然后'Java构建路径'。选择“库”选项卡,然后单击“添加外部JAR ...”按钮,然后浏览并添加它们。

答案 2 :(得分:0)

我遇到了同样的问题。详细输出中有很多“Dx处理...”消息,构建classes.dex(3.4 Mb)需要大约3-4分钟。 那是非常慢,我感觉到了一个butthurt。 然后我做了一个研究,发现问题的原因是错误的eclipse JVM设置(eclipse.ini)。顺便说一句,我从一些stackoverflow的答案得到了这个令人讨厌的配置,超过100个接受。

请确保eclipse.ini不包含以下行:


    CompileThreshold=5

我删除了这一行,现在编译大约需要10秒! 此外,现在我在eclipse配置中使用ParallelGC而不是G1GC,因为它更稳定并且不会使我的IDE崩溃。

因此,您的主要任务是修改您的eclipse.ini并删除所有可疑和实验参数。