错误:# Cannot fit requested classes in a single dex file (# methods: 74519 > 65536)

最近开发安卓程序遇到以下错误:

Cannot fit requested classes in a single dex file (# methods: 74519 > 65536)

翻译:
无法将请求的类放入单个dex文件(#方法:74519>65536)

大致意思是Android App中的方法数超过65535,如果往下兼容到低版本设备时,就会报编译错误,尤其在引入一些jar包之后容易出现这个错误,因为一些Android系统定义单个dex的总方法数的最大值是65535,当你引入一些jar包后方法超过65535个方法。一个dex已经装不下了,需要个多个dex,也就是multidex。

解决方案

1.配置依赖

在app目录下的build.gradle文件里的dependencies下添加如下依赖:

implementation \'com.android.support:multidex:1.0.3\'

然后在android下的defaultConfig添加以下配置:

multiDexEnabled true

配置好后我的文件内容如下:
build.gradle

plugins {  
  id \'com.android.application\'  
}  
  
android {  
  compileSdkVersion 30  
  buildToolsVersion "30.0.2"  
  
  defaultConfig {  
  applicationId "minuy.android.nlecloud"  
  minSdkVersion 16  
  targetSdkVersion 30  
  versionCode 1  
  versionName "1.0"  
  
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"  
  
  multiDexEnabled true  
  }  
  
  buildTypes {  
  release {  
  minifyEnabled false  
  proguardFiles getDefaultProguardFile(\'proguard-android-optimize.txt\'), \'proguard-rules.pro\'  
  }  
 }  
  compileOptions {  
  sourceCompatibility JavaVersion.VERSION_1_8  
  targetCompatibility JavaVersion.VERSION_1_8  
  }  
}  
  
dependencies {  
  
  implementation \'androidx.appcompat:appcompat:1.2.0\'  
  implementation \'com.google.android.material:material:1.2.1\'  
  implementation \'androidx.constraintlayout:constraintlayout:2.0.2\'  
  implementation project(path: \':nlecloud-sdk\')  
    testImplementation \'junit:junit:4.+\'  
  androidTestImplementation \'androidx.test.ext:junit:1.1.2\'  
  androidTestImplementation \'androidx.test.espresso:espresso-core:3.3.0\'  
  implementation("com.squareup.okhttp3:okhttp:4.9.0")  
  
    implementation \'com.android.support:multidex:1.0.3\'  
}

2.自定义Application子类

新建一个Java类并继承自Application
覆盖onCreate方法。
onCreate方法里加入如下语句:

MultiDex.install(this);

我的Java类内容如下:
MainApplication.java

package minuy.android.nlecloud;  
  
import android.app.Application;  
import androidx.multidex.MultiDex;  
  
public class MainApplication extends Application {  
    @Override  
  public void onCreate() {  
        super.onCreate();  
        MultiDex.install(this);  
    }  
}

3.配置AndroidManifest.xml

application下加入如下语句:

android:name=".{$刚刚新建的类名}"

例如我的:

android:name=".MainApplication"

配置好后,我的AndroidManifest.xml文件内容如下:
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  package="minuy.android.nlecloud">  
  
    <uses-permission android:name="android.permission.INTERNET" />  
  
    <application  
  android:name=".MainApplication"  
  android:allowBackup="true"  
  android:icon="@drawable/ic_launcher_icon"  
  android:label="@string/app_name"  
  android:roundIcon="@drawable/ic_launcher_icon"  
  android:supportsRtl="true"  
  android:theme="@style/Theme.NleCloud">  
        <activity android:name=".StartActivity">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>   
    </application>  
  
</manifest>

问题解决!

参考:

https://blog.csdn.net/m0_37707561/article/details/84983184

版权声明:本文为minuy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/minuy/p/13922663.html