【问题标题】:Android gives error "Cannot fit requested classes in a single dex file"Android 给出错误“无法在单个 dex 文件中容纳请求的类”
【发布时间】:2018-12-22 19:25:06
【问题描述】:

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

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

# methods: 68061 > 65536 Message{kind=ERROR, text=Cannot fit请求的类在单个dex文件中。尝试提供一个 main-dex 列表。

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

我真的是 Android 新手,但我不明白问题所在以及我需要做什么?为什么我现在遇到这个问题,而不是以前?

【问题讨论】:

    标签: java android compiler-errors dex


    【解决方案1】:

    您可以按照以下步骤解决此问题。

    第 1 步:迁移到 AndroidX

    重构 > 迁移到 AndroidX

    第 2 步: 在 build.gradle 文件中添加此依赖项:

    implementation 'androidx.multidex:multidex:2.0.1'
    

    第 3 步: 在 build.gradle 的 defaultConfig 部分添加:

    multiDexEnabled true
    

    【讨论】:

      【解决方案2】:

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

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

      multiDexEnabled true

      参考图片

      【讨论】:

        【解决方案3】:

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

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

        第一个是实现与位置相关的整个播放服务库

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

        这些整个库可能有超过 40000 种方法(只是一个估计值,我不知道总数),接近 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 的更多信息 5.0 运行时,请参阅 ART 简介。

        如果您的目标是较低的设备 (Android 4.1 API 16) 或 Android 5 (API 20) 之前的设备

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

        在最后一种情况下,您将需要使用 multidex

        【讨论】:

          【解决方案4】:

          build.gradle文件中添加依赖:

          implementation 'androidx.multidex:multidex:2.0.1'
          

          build.gradledefaultConfig 部分添加:

          multiDexEnabled true
          

          更多详情:Error:Cannot fit requested classes in a single dex file.Try supplying a main-dex list. # methods: 72477 > 65536

          【讨论】:

          • 有人想知道哪个build.gradle文件请更新以下文件android/app/build.gradle
          • 一个重要的细节。此错误在我的应用程序的“build.gradle”中将 com.google.android.gms: play-services-ads 从版本 19.3.0 更新到版本 19.4.0 后开始。我的应用程序有两种风格,PRO 和 FREE。由于 com.google.android.gms: play-services-ads 仅适用于免费版,而不是在 gradle “defaultConfig” 中添加“multiDexEnabled true”,您必须在“build”中的“productFlavors”区域添加它.gradle"
          • 我在没有实现的情况下添加了它并且它有效(!)
          • 这让我想知道如果不是为 StackOverflow 这样的网站我们应该做什么?当我使用演练通关游戏时,也会发生同样的情况,然后开始探索“我为什么不知道”,然后发现真的没有办法知道......这是真的吗?
          • 这对我们有用。
          【解决方案5】:

          当您将deprecated npmcorrect npm 用于相同目的时会出现此错误

          【讨论】:

          • 从 pakage.json 中移除
          【解决方案6】:

          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'
          }
             
          

          【讨论】:

            【解决方案7】:

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

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

            并在defaultConfig中添加以下内容,

            multiDexEnabled true
            

            希望你能找到解决办法。

            【讨论】:

              【解决方案8】:

              运行 RN 0.62,这对我成功构建很有用。

              更新 build.gradle

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

              更新默认配置

              multiDexEnabled true

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

              【讨论】:

              • 感谢你,但它只对我有用 multiDexEnabled true。
              • 完美答案。没有什么比看到需要添加东西的确切位置更好的了。
              猜你喜欢
              • 2020-09-25
              • 1970-01-01
              • 1970-01-01
              • 2020-01-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-06-23
              相关资源
              最近更新 更多