该错误是由于 dex 文件中的方法引用超过了 65536 的限制所致。解决此问题的方法有以下几种:

  1. 使用 multidex 支持:在 'android/app/build.gradle' 文件中的 'defaultConfig' 部分添加 'multiDexEnabled true',并在 'dependencies' 部分添加 'implementation 'com.android.support:multidex:1.0.3''。然后,在 'android/app/src/main/' 目录下创建一个名为 'ApplicationClassName.java' 的新文件,并将其内容设置为以下代码:
import android.content.Context;
import androidx.multidex.MultiDex;
import io.flutter.app.FlutterApplication;

public class ApplicationClassName extends FlutterApplication {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

将 'ApplicationClassName' 替换为你的应用程序类名,并将 'android:name' 属性设置为该类名。

  1. 减少依赖项:你可以检查你的项目中是否导入了过多的库和依赖项。尝试删除一些不必要的库或使用其精简版本,以减少方法引用的数量。

  2. 使用 ProGuard(仅适用于发布版本):在 'android/app/build.gradle' 文件中的 'release' 部分添加以下配置来启用 ProGuard:

buildTypes {
    release {
        // ...
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

然后,在项目的根目录中创建一个名为 'proguard-rules.pro' 的文件,并添加以下规则:

# Flutter-specific rules
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-keep class io.flutter.plugin.common.** { *; }
-keep class io.flutter.app.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.embedding.engine.** { *; }
-keep class io.flutter.embedding.engine.dart.** { *; }
-keep class io.flutter.embedding.engine.loader.** { *; }
-keep class io.flutter.embedding.android.** { *; }
-keep class io.flutter.embedding.android.FlutterActivityLaunchConfigs { *; }

# Your other rules...

这将使用 ProGuard 来缩小生成的 dex 文件。

  1. 拆分依赖项:你可以将一些大型的依赖项拆分为更小的模块,并按需加载它们。

  2. 使用分析工具:使用一些代码分析工具,如 Android Studio 中的 'Analyze' 功能,可以帮助你找出代码中生成大量方法引用的原因,并尝试优化或减少这些引用。

每种方法的适用性取决于你的项目和需求,你可以根据具体情况选择适合你的解决方案。

Flutter 插件错误:ERROR:D8: Cannot fit requested classes in a single dex file (# methods: 72189 > 65536) 解决方法

原文地址: https://www.cveoy.top/t/topic/c0Qr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录