今天早上我不知道为什么无法在手机上启动我的应用程序。我收到以下错误消息:
无法将请求的类适配到单个dex文件中,请尝试提供主dex列表。
# 方法数:68061 > 65536 Message{kind=ERROR, text=无法将请求的类适配到单个dex文件中,请尝试提供主dex列表。
# 方法数:68061 > 65536,来源=[未知源文件],工具
我对Android很陌生,不明白问题出在哪里以及我需要做什么?为什么我现在才遇到这个问题而之前没有遇到呢?
今天早上我不知道为什么无法在手机上启动我的应用程序。我收到以下错误消息:
无法将请求的类适配到单个dex文件中,请尝试提供主dex列表。
# 方法数:68061 > 65536 Message{kind=ERROR, text=无法将请求的类适配到单个dex文件中,请尝试提供主dex列表。
# 方法数:68061 > 65536,来源=[未知源文件],工具
我对Android很陌生,不明白问题出在哪里以及我需要做什么?为什么我现在才遇到这个问题而之前没有遇到呢?
在根目录下的 build.gradle
文件中,做以下操作:
在根build.gradle
文件中执行某些操作:
dependencies {
// ...
implementation 'androidx.multidex:multidex:2.0.1'
}
android {
defaultConfig {
// ...
multiDexEnabled true
}
}
更多细节请查看:错误:无法将请求的类放入单个dex文件中。请尝试提供一个主dex列表。# 方法: 72477 > 65536
多 dex 并不总是解决问题的方案,虽然它会生成更多的 dex 文件以适应您的方法计数,但一定要确保不要导入比所需更多的方法,因为在长期内这将使您的构建速度比以前更慢。
例如,如果您只需要使用 play 服务中的位置库,则有两个选项
第一种是实现包含位置库的整个 play-services 库
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及以上版本使用称为ART的运行时,本地支持从应用程序APK文件中加载多个dex文件。 ART在应用安装时执行预编译,扫描classes(... N).dex文件并将其编译为Android设备执行的单个.oat文件。有关Android 5.0运行时的更多信息,请参见介绍ART。
在Android 5.0之前的平台版本中,使用Dalvik运行时来执行应用程序代码。默认情况下,Dalvik每个APK限制为一个classes.dex字节码文件。为了绕过此限制,您可以使用multidex支持库,该库成为应用程序主DEX文件的一部分,然后管理对附加DEX文件及其包含的代码的访问。
在最后一种情况下,您需要使用multidex。
implementation 'com.android.support:multidex:1.0.3'
在defaultConfig中添加以下内容:
multiDexEnabled true
希望您能找到解决方案。
您可以按照以下步骤解决此问题。
步骤1:迁移到AndroidX
重构 > 迁移到AndroidX
步骤2:在build.gradle文件中添加此依赖项:
implementation 'androidx.multidex:multidex:2.0.1'
multiDexEnabled true
当您的应用程序及其引用的库超过65,536个方法时,您会遇到一个构建错误,指示您的应用程序已达到Android构建架构的限制更多信息在此处。
只需在buid.gradle(Module:app)
文件中添加多Dex支持库到您的依赖项即可。
dependencies {
def multidex_version = "2.0.1"
implementation 'androidx.multidex:multidex:$multidex_version'
}
当您同时使用已弃用的npm
和正确的npm
来达到相同的目的时,就会出现此错误。
build.gradle
文件,请更新以下文件android/app/build.gradle
。 - Joel Jerushan