IntelliJ中的动态类加载 - 64K方法dex问题

12

我正在开发一个项目,该项目很快接近dex文件的64K方法限制。这篇Android开发者博客文章(来自2011年7月)解释了如何使用由Ant驱动的命令行构建实现动态类加载,但没有探讨如何从IDE中实现它(除了说在Eclipse中无法工作)。

我查看了一些资料,但没有找到有关如何从IntelliJ中使此系统工作的信息。IntelliJ是否支持构建具有多个dex文件的应用程序?如果是,请问如何设置?


你遇到了什么错误? - hopia
2
Android Dex:java.lang.IllegalArgumentException:方法ID不在[0,0xffff]范围内:65536 - Mark
5个回答

3
尝试使用ProGuard从项目中剥离未使用的类和方法,您就可以(希望如此)发现您不需要多个dex文件。
话虽如此,如果您确实需要:IntelliJ和Eclipse只是IDE,它们不直接构建您的代码,因此您需要确定如何构建您的项目,最可能是Ant或Gradle。
如果您的项目是Gradle项目,则在项目根目录中将有一个build.gradle文件--如果是这种情况,则您需要查看如何使用Android Gradle插件完成相同的操作,一个很好的起点是http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Manipulating-tasks

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

0

多 Dex 似乎是解决 65K 方法限制的最佳(也是最快)选项。Google 在这里设置 Multidex 的文档非常好 here


0

有两个选项:

  1. 拆分现有类。或者
  2. 将您的类移出到另一个项目并将其构建为库(.jar)。正如查询中提到的博客文章建议的那样,使用他们的类来单独加载此库(.jar)到您的项目中。

但是如果我这样做,由于该jar正在动态加载,对该jar的引用在我的主项目中不会正确编译,对吗? - Mark
不会的,因为jar文件已经被加载了,如果有引用,也不会造成任何问题。 - Tabrej Khan

0

您能提供有关您的项目的详细信息吗?

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

也许您可以在项目依赖项中找到类似的弱点。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接