1
[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 方法。

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

4

2 回答 2

5

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

只需将您的 APK 放在那里。

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

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

此外:

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

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

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

于 2015-07-16T12:39:32.147 回答
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。

我为您找到了有关如何解决此问题的官方文档

于 2015-07-16T12:29:54.057 回答