错误:# 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>
问题解决!