Android给出错误"无法在单个dex文件中使用所请求的类"

Kev*_*inB 18 java android compiler-errors dex

我不知道为什么但今天早上在我的手机上启动我的应用是不可能的.我收到此错误消息:

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

#methods:68061> 65536消息{kind = ERROR,text =无法在单个dex文件中容纳请求的类.尝试提供main-dex列表.

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

我是Android新手,我不明白这个问题,我需要做什么?为什么我现在而不是之前得到这个问题?

Gok*_* KP 48

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

implementation 'com.android.support:multidex:1.0.3'
Run Code Online (Sandbox Code Playgroud)

build.gradledefaultConfig部分添加:

multiDexEnabled true
Run Code Online (Sandbox Code Playgroud)

更多详细信息:错误:无法在单个dex文件中放入请求的类.请尝试提供main-dex列表.#methods:72477> 65536

  • 任何人想知道哪个“build.gradle”文件请更新以下文件“android/app/build.gradle” (10认同)
  • 我添加了它但没有实现并且它有效(!) (3认同)

Gaj*_*ara 31

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

更新 build.gradle 在此处输入图片说明

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

更新默认配置

在此处输入图片说明

multiDexEnabled true

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


Gas*_*lén 16

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

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

第一个是实现随位置提供的整个游戏服务库

implementation 'com.google.android.gms:play-services:11.8.0'
Run Code Online (Sandbox Code Playgroud)

这些整个库可能有超过 40.000 多个方法(只是一个估计,我真的不知道总数),接近达到 65536 个限制方法。

相反,您应该只针对您将使用的库而不是整个库包

在这种情况下

implementation 'com.google.android.gms:play-services-location:11.8.0'
Run Code Online (Sandbox Code Playgroud)

可能只有 50 - 100 个方法可以使用,这在构建时比从整个库包中加载一大堆你永远不会使用的方法要好。

这只是避免获得的提示

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

对于 android 5.0 API 20 + 以上的 minSdkVersion

Android 5.0 及更高版本使用称为 ART 的运行时,该运行时本机支持从应用程序 APK 文件加载多个 dex 文件。ART 在应用程序安装时执行预编译,扫描类 (..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


小智 8

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

 implementation 'com.android.support:multidex:1.0.3'
Run Code Online (Sandbox Code Playgroud)

并在 defaultConfig 中添加以下内容,

multiDexEnabled true
Run Code Online (Sandbox Code Playgroud)

希望你能找到解决办法。


Hit*_*ahu 5

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

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

multiDexEnabled true

请参阅图像以供参考

在此处输入图片说明