Android 方法数超过64K的解决方案

Posted by Don on August 1, 2019

当你的应用及其引用的库超过 65,536 种方法时,你会遇到一个编译错误,指明你的应用已达到 Android 编译架构规定的引用限制:

 trouble writing output:
    Too many field references: 131000; max is 65536.
    You may try using --multi-dex option.

较低版本的编译系统会报告一个不同的错误,但指示的是同一问题:

Conversion to Dalvik format failed:
    Unable to execute dex: method ID not in [0, 0xffff]: 65536

针对此问题,解决方案如下:

  • Android 5.0及以上
    只需在模块级 build.gradle 文件中将 multiDexEnabled 设为 true,如下所示:
android {
        defaultConfig {
            ...
            minSdkVersion 21
            targetSdkVersion 28
	    //开启多 dex 文件配置
            multiDexEnabled true 
        }
        ...
    }
  • Android 5.0以下
    1. 修改模块级 build.gradle 文件以启用多 dex 文件,并将多 dex 文件库添加为依赖项,如下所示
android {
        defaultConfig {
            ...
            minSdkVersion 17
            targetSdkVersion 28
            multiDexEnabled true
        }
        ...
    }

    dependencies {
    //dex依赖库
      compile 'com.android.support:multidex:1.0.3'
    }
  1. 修改清单文件以设置 标记中的 android:name,如下所示:
<application
                android:name="android.support.multidex.MultiDexApplication" >
          ...
        </application>

如果你自定义了Application类,则可以继承MultiDexApplication;
如果你自定义了Application类,单无法更改基类,那你可以替换 attachBaseContext() 方法并调用 MultiDex.install(this) 来启用多 dex 文件:

public class MyApplication extends XXXApplication {
      @Override
      protected void attachBaseContext(Context base) {
         super.attachBaseContext(base);
         MultiDex.install(this);
      }
    }