方法参考太多:107085;扩展 MultiDexApplication 后最大值为 65536

Too many method references: 107085; max is 65536 after extending MultiDexApplication

[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 扩展了我的应用程序 class,但我仍然收到这个错误。

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

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

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

  1. 编辑您的 manifest.xml 并添加对 MultidexApplication 的引用 class

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

    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

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

只需将您的 APK 放在那里。

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

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

另外:

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

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

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