【错误解决】Android APK 方法数量限制
错误:# 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>
问题解决!
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号