当前位置: 首页 > 知识库问答 >
问题:

如何在minSdkVersion 21中修复DEX 64K方法限制?

太叔志尚
2023-03-14

创建APK文件时出错:

错误:. dex文件中方法引用的数量不能超过64K。https://developer.android.com/tools/building/multidex.html了解如何解决此问题

我引用了本教程来修复此问题,但仍然出现此错误。

我在我的项目中使用了MultiDex,如下所示:

在biuld。sdk 16的渐变:

apply plugin: 'com.android.application'

repositories {
    jcenter()
    mavenCentral()
}

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"
    defaultConfig {
        applicationId "com.saly.test"

        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"

        multiDexEnabled true

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile project(':volley')
    compile 'com.android.support:multidex:1.0.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.0.0'
    compile 'com.android.support:design:24.0.0'
    compile 'com.android.support:recyclerview-v7:24.0.0'
    compile 'com.android.support:cardview-v7:24.0.0'
    compile 'com.android.support:support-v4:24.0.0'
    compile 'com.google.android.gms:play-services:9.2.1'
    compile 'com.google.android.gms:play-services-location:9.2.1'
    compile 'com.google.android.gms:play-services-gcm:9.2.1'
    compile 'com.google.android.gms:play-services-maps:9.2.1'
    compile 'com.onesignal:OneSignal:2.+@aar'
}

在sdk 16的清单中:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ...>

    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">

        ...

    </application>
   </manifest>

现在我得到了新的错误:

错误:ile.parseOutOfMemoryError:GC开销限制超出错误:在ile.java:388ConstantPoolPcom.android.dx.cf.direct.0(ConstantPoolPile.get)错误:在ile.java:251ConstantPoolPcom.android.dx.command.dexer.(ConstantPoolPain.parse)错误:在ain.java:772ConstantPoolPcom.android.dx.command.dexer.IfNecessary(ConstantPoolPain.access)错误:在ain.java:85ConstantPoolPcom.android.dx.command.dexer.池(ConstantPoolPask.call)错误:在com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:491)错误:在com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)错误:在DirectClassFjava.lang.ToInterfacesIfNecessary(DirectClassFcom.android.dx.cf.cst.)错误:在arser.parseDirectClassFarser.java:289Magic(DirectClassFcom.android.dx.cf.cst.)错误:在arser.parseMarser.java:150(Mcom.android.dx.cf.cst.)错误:在arser.parseMarser.java:1241500美元(Mcom.android.dx.cf.cst.)错误:在arser.getMain$ClassParserTarser.java:115(Main.ClassPathOpenern. Process Archive(ClassPathOpenern. java: 284)错误:在com. android. dx. cf. Direct。ClassPathOpenern. Process One(ClassPathOpenern. java: 166)错误:在com. android. dx. cf. Direct。ClassPathOpenern. Process(ClassPathOpenern. java: 144)错误:在com. android. dx.命令. dexe。Main. Process One(Main. java: 677)错误:在com. android. dx.命令. dexe。Main. Process AllFiles(Main. java: 569)错误:在com. android. dx.命令. dexe。Main. runMultiDex(Main. java: 366)错误:在com. android. dx.命令. dexe。Main. run(Main. java: 275)错误:在com. android. dx.命令. dexe。Main. main(Main. java

然后我将我的最小sdk更改为21以修复此错误,但它不起作用。

这是我的身材。sdk 21的渐变:

apply plugin: 'com.android.application'

repositories {
    jcenter()
    mavenCentral()
}

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"
    defaultConfig {
        applicationId "com.saly.test" 

        minSdkVersion 21
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile project(':volley')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.0.0'
    compile 'com.android.support:design:24.0.0'
    compile 'com.android.support:recyclerview-v7:24.0.0'
    compile 'com.android.support:cardview-v7:24.0.0'
    compile 'com.android.support:support-v4:24.0.0'
    compile 'com.google.android.gms:play-services:9.2.1'
    compile 'com.google.android.gms:play-services-location:9.2.1'
    compile 'com.google.android.gms:play-services-gcm:9.2.1'
    compile 'com.google.android.gms:play-services-maps:9.2.1'
}

如何修复此错误?

提前谢谢。

共有2个答案

商天逸
2023-03-14

您只需添加:

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"

    defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 21
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
}

dependencies {
   compile 'com.android.support:multidex:1.0.1'
}

这是AndroidManifest。xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

或者,如果您有自己的应用程序类的实现,请在应用程序中重写attachBaseContext方法,如下所示:

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

关飞翔
2023-03-14

只要加上这些线

dexOptions {
    javaMaxHeapSize "4g"
}

gradle脚本中的任何位置

android { 
....

dexOptions {
    javaMaxHeapSize "4g"
}

....
}
 类似资料:
  • 我已经卸载并安装了3次Homebrew现在,因为它似乎从来不允许我安装任何东西,因为它拒绝我的权限,在大多数安装结束。 作为示例,我将发布当前面临的libjpeg下载场景。 我尝试安装libjpeg并得到:

  • 我正试图将位图保存到文件中,但android studio抛出了一个异常java。io。FileNotFoundException:/storage/simulated/0/Pictures/savedBitmap。png(权限被拒绝)我做错了什么?

  • 求你了,我需要你的帮助。每当我试图运行下面的程序时,它会说不兼容的类型,字符串不能转换为整数。

  • 我安装了Jenkins作为docker容器。在Jenkins全局工具配置中,添加MAVEN_HOME(/usr/share/MAVEN)并选中“自动安装”。当我按下Build Now时,会出现以下错误: 我没有/var/jenkins_home/workspace/MavenProject目录。并且此目录位于具有完全权限的根帐户下。你知道我该怎么修吗?

  • 我想用python绘制一个非常简单的直方图。这是我的代码: 这就是结果 我怎样才能把这些条放在整数的地方呢?为什么我的图表也显示浮点数?

  • 我想使用“扩展”操作符克隆对象。但是,这些方法不会复制,如图所示 我知道你可以做Object赋值(),但我正在寻找一种使用ES6语法的方法 ES6中使用扩展语法的深度复制解决方案涉及深度克隆:我只对复制方法和属性感兴趣 如何克隆javascript ES6类实例的解决方案使用Object.Assign()