Flutter导入第三方包后报错The number of method references in a .dex file cannot exceed 64K

简介: Flutter导入第三方包后报错The number of method references in a .dex file cannot exceed 64K

报错

导入just_audio: ^0.9.34 后编译报错。报错内容如下:

ERROR:D8: Cannot fit requested classes in a single dex file (# methods: 71340 > 65536)
com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 
The number of method references in a .dex file cannot exceed 64K.

ebe8fad7021fecb717634c1e1d3d71a1.png

报错原因

这个错误提示意味着您的应用程序已经超过了 Android 操作系统中每个 Dex 文件的方法引用数限制(也称为 64K 方法限制)。这是由于您的应用程序中使用的库和依赖项可能包含大量的方法引用,这会导致 Dex 文件大小超过限制。


关于 64K 引用限制

Android 应用 (APK) 文件包含 Dalvik Executable (DEX) 文件形式的可执行字节码文件,这些文件包含用来运行应用的已编译代码。Dalvik Executable 规范将可在单个 DEX 文件内引用的方法总数限制为 65,536,其中包括 Android 框架方法、库方法以及您自己的代码中的方法。


规避 64K 限制

在将您的应用配置为支持使用 64K 或更多方法引用之前,请采取措施以减少应用代码调用的引用总数,包括由您的应用代码或包含的库定义的方法。


以下策略可帮助您避免达到 DEX 引用限制:

查看应用的直接和传递依赖项

考虑您在应用中包含任何庞大的库依赖项所带来的价值是否多于为应用添加大量代码所带来的弊端。一种常见的问题模式是,仅仅为了使用几个实用方法就在应用中加入非常庞大的库。减少应用代码依赖项往往能够帮助您规避 DEX 引用限制。


通过 R8 移除未使用的代码

启用代码缩减以针对发布 build 运行 R8。启用缩减有助于确保您交付的 APK 不含未使用的代码。如果代码缩减配置正确,它还可以从您的依赖项中移除未使用的代码和资源。

使用这些技巧可助您减小 APK 的总体大小并使您无需在应用中启用 MultiDex。


解决方法

Android 5.0 之前版本的 MultiDex 支持

Android 5.0(API 级别 21)之前的平台版本使用 Dalvik 运行时执行应用代码。默认情况下,Dalvik 将应用限制为每个 APK 只能使用一个 classes.dex 字节码文件。为了绕过这一限制,请向模块级 build.gradle 或 build.gradle.kts 文件中添加 MultiDex 库:


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

此库会成为应用的主要 DEX 文件的一部分,然后管理对其他 DEX 文件及其所包含代码的访问。 、


直到我遇到这个问题时,MultiDex 的最新版本为2.0.1*

Android 5.0 之后版本

如果您的 minSdkVersion 设为 21 或更高版本,系统会默认启用 MultiDex,并且您不需要 MultiDex 库。

所以另外一种修改方式是直接把minSdkVersion 设为 21


75c781872f98716040e4376e9cc0c8e9.png

修改后编译,报错消失,如图


c3e98efd02dcf606b00010164a0941c1.png














相关文章
|
4月前
|
缓存 Dart 开发工具
解决Flutter报错The method ‘File.create‘ has fewer named arguments than those of overridden method
解决Flutter报错The method ‘File.create‘ has fewer named arguments than those of overridden method
62 3
|
21天前
|
存储 测试技术 Shell
Flutter UT太多导致跑覆盖率报错
Flutter UT太多导致跑覆盖率报错
25 2
|
4月前
Flutter更改主题颜色报错:type ‘Color‘ is not a subtype of type ‘MaterialColor‘
Flutter更改主题颜色报错:type ‘Color‘ is not a subtype of type ‘MaterialColor‘
45 4
|
4月前
解决Flutter报错The named parameter |method ‘xxxx‘ isn‘t defined.
解决Flutter报错The named parameter |method ‘xxxx‘ isn‘t defined.
136 3
|
4月前
|
Dart
Flutter使用Scaffold报错。
Flutter使用Scaffold报错。
45 3
|
4月前
|
开发工具 iOS开发
解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app
解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app
157 2
|
4月前
|
iOS开发
解决Flutter运行IOS报错:Podfile is out of date
解决Flutter运行IOS报错:Podfile is out of date
79 1
|
4月前
|
安全 前端开发 网络安全
【Azure App Service】访问App Service应用报错 SSL: WRONG_VERSION_NUMBER
【Azure App Service】访问App Service应用报错 SSL: WRONG_VERSION_NUMBER
141 0
|
5月前
|
安全 前端开发 网络安全
【Azure App Service】访问App Service应用报错 SSL: WRONG_VERSION_NUMBER(上海蓝云阻断页)
在Azure App Service上部署的应用遇到`SSL: WRONG_VERSION_NUMBER`错误。问题可能由不兼容的TLS版本引起,但即使将最小入站TLS版本改为1.2,问题仍存在。实际原因是上海蓝云的阻断页面,表明网站未完成ICP备案或有安全规定限制。解决方案包括:1) 对App Service绑定自定义域名并进行ICP备案,或2) 使用Application Gateway处理公网请求。在复杂环境中,需仔细排查和适配规则。
174 11
|
4月前
解决Flutter报错boxconstraints has non-normalized height/width constraints
解决Flutter报错boxconstraints has non-normalized height/width constraints
44 0