【问题标题】:Dynamic class loading with IntelliJ - 64K method dex issue使用 IntelliJ 进行动态类加载 - 64K 方法 dex 问题
【发布时间】:2015-07-31 02:26:12
【问题描述】:

我正在开展一个项目,该项目正在迅速接近 dex 文件的 64K 方法限制。这个Android Developer blog post(从 2011 年 7 月开始)解释了如何使用由 Ant 驱动的命令行构建来获得动态类加载,但没有探讨如何在 IDE 中让它工作(除了说它在 Eclipse 中不起作用) .

我环顾四周,找不到任何关于让这个系统在 IntelliJ 中工作的信息。 IntelliJ 是否支持使用多个 dex 文件构建应用程序?如果有,如何设置?

【问题讨论】:

  • 你遇到了什么错误?
  • Android Dex: java.lang.IllegalArgumentException: 方法 ID 不在 [0, 0xffff]: 65536

标签: android intellij-idea dex


【解决方案1】:

尝试使用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 可以很好地工作。幸运的是,谷歌发布了 Multidex,所以现在这不是问题。 :)
【解决方案2】:

有两种选择:

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

【讨论】:

  • 但是如果我这样做了,在我的主项目中引用所说的 jar 是否不能正确编译,因为 jar 是动态加载的?
  • 不,它不会因为 jar 将被加载,如果给出参考,它不会引起任何问题。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

    Eclipse 可以启动外部 ant 脚本,但这对工具没有帮助。最佳推荐是 Android Studio 和 Gradle,因为所有命令都在 IDE 外部运行,然后将此 Ant 脚本 http://code.google.com/p/android-custom-class-loading-sample/source/browse/trunk/android-custom-class-loading-sample/build.xml 移植到 gradle。

    请留意以下官方支持:https://groups.google.com/forum/#!topic/gradle-android-plugin-users/zG_xUeVaV7s

    【讨论】:

      【解决方案5】:

      Multidex 似乎是解决 65K 方法限制的最佳(也是最快)选项。 Google 有很多关于设置 Multidex here 的文档。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-22
        • 1970-01-01
        • 2017-07-08
        • 1970-01-01
        • 1970-01-01
        • 2014-11-19
        • 1970-01-01
        • 2023-01-18
        相关资源
        最近更新 更多