Android给出错误“无法在单个dex文件中容纳请求的类”

时间:2018-07-14 17:09:20

标签: java android compiler-errors dex

我不知道为什么,但是今天早上无法在手机上启动我的应用程序。我收到此错误消息:

  

无法在单个dex文件中容纳请求的类。尝试提供一个   main-dex列表。

     

#方法:68061> 65536消息{种类=错误,文本=不能在单个dex文件中容纳所请求的类。尝试提供main-dex列表。

     

#方法:68061> 65536,sources = [未知源文件],工具

我真的是Android的新手,我不明白问题所在,该怎么办?为什么我现在而不是以前遇到这个问题?

7 个答案:

答案 0 :(得分:21)

运行RN 0.62,这对我成功建立了工作。

更新build.gradle enter image description here

classpath('com.android.support:multidex:1.0.3')

更新defaultConfig

enter image description here

multiDexEnabled true

在这2个更改之后,重新启动gradle构建。

答案 1 :(得分:16)

build.gradle文件中添加依赖项:

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

build.gradle的{​​{1}}部分中添加:

defaultConfig

此处有更多详细信息:Error:Cannot fit requested classes in a single dex file.Try supplying a main-dex list. # methods: 72477 > 65536

答案 2 :(得分:3)

在build.gradle(app)文件中: 在依赖项中添加以下内容:

public override func dragStateDidChange(_ dragState: UICollectionViewCell.DragState) {
    switch dragState {

    case .none:
        self.layer.opacity = 1
    case .lifting:
        self.layer.opacity = 0
    case .dragging:
        self.layer.opacity = 1
    }
}

并在defaultConfig中添加以下内容,

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

希望您会找到解决方案。

答案 3 :(得分:2)

更新 2021 Android-X 和 Android Studio 4.XX:

在应用级 Build.Gradle 的默认配置中添加 multiDexEnabled 就足够了

multiDexEnabled 为真

查看图片以供参考

enter image description here

答案 4 :(得分:1)

推荐的android x解决方案

为什么会出错

当您的应用及其引用的库超过65,536个方法时,您会遇到一个构建错误,表明您的应用已达到Android构建体系结构的限制more information here

解决方案

只需将多dex支持库添加到buid.gradle (Module: app)文件中的依赖项中即可

dependencies {
    def multidex_version = "2.0.1"
    implementation 'androidx.multidex:multidex:$multidex_version'
}
   

答案 5 :(得分:0)

multidex并不总是解决问题的方法,它确实会生成更多的dex文件来满足您的方法数量,但请确保不要导入更多所需的方法,因为从长远来看,这将使您的构建速度比以前。

例如,如果您只需要使用Play服务中的位置库,则有两种选择

第一个是实现随位置附带的整个播放服务库

implementation 'com.google.android.gms:play-services:11.8.0'

这些整个库可能有超过40.000种方法(仅仅是一个估计,我真的不知道总数),即将达到65536个极限方法。

相反,您应该只定位要使用的库,而不要定位整个库

在这种情况下

implementation 'com.google.android.gms:play-services-location:11.8.0'

可能只有50-100种方法可以使用,这比在您永远不会使用的整个库包中加载一大堆方法要好得多。

这只是避免出现的提示

  

无法在单个dex文件中容纳请求的类。

对于高于android 5.0 API 20 +的minSdkVersion

  

Android 5.0及更高版本使用称为ART的运行时   支持从应用程序APK文件加载多个dex文件。艺术   在应用程序安装时执行预编译,该程序会扫描   classes(.. N).dex文件并将其编译为单个.oat文件,以用于   由Android设备执行。有关Android的更多信息   5.0运行时,请参见ART简介。

如果您定位的是较低版本的设备(Android 4.1 API 16)或低于Android 5(API 20)

  

Android 5.0之前版本的平台使用Dalvik运行时   用于执行应用程序代码。默认情况下,Dalvik将应用程序限制为单个   每个APK的classes.dex字节码文件。为了解决这个问题   局限性,您可以使用multidex支持库,   应用的主要DEX文件的一部分,然后管理对   其他DEX文件及其包含的代码。

在这种情况下,您将需要使用multidex

答案 6 :(得分:-1)

当您同时使用deprecated npmcorrect npm出于同一目的时,就会出现此错误