2014-01-15 22 views
12

我正在研究快速接近dex文件的64K方法限制的项目。这个Android Developer blog post(从2011年7月开始)解释了如何通过由Ant驱动的命令行构建来获得动态类加载,但并未探索如何从IDE内部使其工作(除了说它在Eclipse中不起作用)。使用IntelliJ-64K方法dex问题的动态类加载

我环顾四周,找不到就得到这个系统从内部工作的IntelliJ什么。 IntelliJ是否支持使用多个dex文件构建应用程序?如果是这样,一个人如何设置?

+0

你有什么错误? – hopia

+2

的Android敏捷:java.lang.IllegalArgumentException异常:不能在[0,0xFFFF的]方法ID:65536 – Mark

回答

0

Multidex似乎是最好的,最快的解决方法65K限制选项。 Google在设置Multidex here方面拥有出色的文档。

0

有两种选择:

  1. 打破现有的类。或者
  2. 将您的课程移出到另一个项目并将其构建为库(.jar)。当博客帖子(在查询中提到)建议时,使用他们的类分别在您的项目中加载此库(.jar)。
+0

但如果我这样做,就不要引用说罐子中未正确编译给出的罐子我的主要项目是动态加载? – Mark

+0

不,它不会像罐子将被加载,如果给出的参考它不会导致任何问题。 –

3

尝试使用ProGuard去除未使用的类和方法从您的项目,你应该(希望)发现你不需要多个dex文件。

这就是说,如果你这样做:的IntelliJ和Eclipse的IDE只是 - 他们不直接建立自己的代码 - 所以你需要确定你的项目是如何被建立 - 最有可能的Ant或摇篮。

如果你的项目是一个Gradle项目,那么在项目根目录下会有一个build.gradle文件 - 如果是这种情况,那么你需要看看如何用Android Gradle插件完成相同的工作,开始的地方将是http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Manipulating-tasks

+0

如果你有很多未使用的类/方法,Proguard会很好地工作。幸运的是,Google发布了Multidex,所以现在这不是问题。 :) – Mark

0

你能否提供你的项目的细节?

的PlayN库连接到我的项目后,最近我有同样的问题。首先,我读了你提到的所有文章和相关内容,但最终我通过从依赖Pythagoras jar中排除了一部分类来解决了这个问题(我删除了pythagoras.d包,因为pythagoras.f是“double”浮动“,在PlayN中被用来代替它),这是PlayN中最大的依赖之一。

也许你可以找到你的项目依赖类似薄弱的地方。