zoukankan      html  css  js  c++  java
  • 【错误解决】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>
    

    问题解决!

    参考:

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

  • 相关阅读:
    Java [leetcode 36]Valid Sudoku
    Java [leetcode 35]Search Insert Position
    java中正则表达式
    Java [leetcode 34]Search for a Range
    SSRS表达式里引用.net dll
    一个简单的批处理
    .NET大批量插入数据到Oracle
    AX2009里调用.NET DLL的效率问题
    生成折扣日记账
    python's twelth day for me
  • 原文地址:https://www.cnblogs.com/minuy/p/13922663.html
Copyright © 2011-2022 走看看