【问题标题】:Too many method references: 107085; max is 65536 after extending MultiDexApplication方法引用过多:107085;扩展 MultiDexApplication 后最大值为 65536
【发布时间】:2015-07-16 12:05:38
【问题描述】:
[2015-07-16 17:32:14 - Loneous] Dx 
trouble writing output: Too many method references: 107085; max is 65536.
You may try using --multi-dex option.

我有这个错误,我已经用 MultiDexApplication 扩展了我的应用程序类,但我仍然收到这个错误。

@Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

还在我的应用程序中添加了 attachBaseContext 方法。

请指导我如何避免此编译错误并成功运行我的应用程序。

【问题讨论】:

  • 您是否已将multiDexEnabled true 添加到您的grandle 文件中?
  • 我正在使用 Eclipse,并且我有扩展 MultiDexApplication 的应用程序类。除此之外,我还需要在清单中做任何事情吗?
  • @Scorpion 多 dex 功能依赖于 Gradle 插件,所以据我所知,它无法与 Eclipse 一起使用。但是,老实说,您是如何设法包含超过 10 万个方法的?如果可能,我会考虑删除不必要的依赖项(库)。
  • @DmitryZaitsev 我只使用来自亚马逊的 1 个 jar 文件,并且它有超过 100 k 的引用。无论如何,我终于转移到了 android studio,因为我别无选择。感谢大家的热情回复和时间。

标签: android android-multidex


【解决方案1】:

Multidex 应该是你最后的手段,首先尝试混淆你的代码,这样签名的 APK 会更苗条(它会删除方法)。之后尝试查看您正在使用哪些 3rd 方库以及它们有多少方法 - 您可以通过此在线工具轻松完成:

只需将您的 APK 放在那里即可。

http://inloop.github.io/apk-method-count/

得到结果后,试着弄清楚你当前使用的某些库是否可以替换为具有较少方法的类似库。

另外:

  • 在您的 gradle 文件中设置“minifyEnabled=true”。

  • 如果您使用支持库,您可以使用 gradle 'exclude module' 减少其中的方法数量(大约 20K (!!)),并仅选择您实际使用的支持库的模块.

无论如何,对于任何应用程序来说,107k 方法似乎有点太多了。

【讨论】:

    【解决方案2】:
    1. 编辑您的 manifest.xml 并添加对您的 MultidexApplication 类的引用

      <application android:name="your.package.MyApplicationWhichExtendsMultidex">
      
    2. 转到您的大构建文件并添加

      multiDexEnabled true
      

      以及对 multidex 支持的依赖

      compile 'com.android.support:multidex:1.0.0'
      

    我不知道 Eclipse 如何处理 Android 项目,但如果它不使用 Gradle,那么您需要在构建期间传递 --multi-dex 选项(如错误所述)。如果您仍在使用 Ant,请转到 Gradle 或 Maven。

    I've found for you the official documentation about how to fix this problem

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多