Flutter应用需要支持Multidex吗?

19

在使用Flutter构建我的应用程序时,我遇到了这个错误。看起来是multidex未启用的问题,尽管我已经做了所有必要的操作来启用它。这是错误信息:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeProjectDexDebug'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
     Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
     Type androidx.activity.R$attr is defined multiple times: C:\Users\Abdul rehman\OneDrive\Desktop\CSC451\Capstone Project\harfanah\build\app\intermediates\project_dex_archive\debug\out\4b5c628c7fbb96e2839e63f71f8803802c039de25c33dd9c9475187dc45e6e1a_1.jar:classes.dex, C:\Users\Abdul rehman\OneDrive\Desktop\CSC451\Capstone Project\harfanah\build\app\intermediates\project_dex_archive\debug\out\9bd7ed05083b8d3edbf142363966d832d9f0694faefda4d175e3ad8ad18fc06d_1.jar:classes.dex

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 30s
[!] App requires Multidex support
    Flutter multidex handling is disabled. If you wish to let the tool configure multidex, use the --mutidex flag.
Exception: Gradle task assembleDebug failed with exit code 1
Exited (sigterm)

我已经检查了所有的解决方案。 启用了Multidex支持并使用了最新版本:

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.harfanahApplication.harfanah"
        minSdkVersion 21
        targetSdkVersion 32
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        multiDexEnabled true
    }
.
.
.

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation("androidx.multidex:multidex:2.0.1")
}

我也将它们添加到gradle.properies中。

org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true

仍然无法工作。有任何建议吗?

6个回答

22

你尝试过使用“flutter clean”进行清除,然后再重新构建吗?你可以使用Flutter CLI工具通过“flutter build --multidex”命令来实现。


2
哇!我差点把电脑炸了,但这真的解决了问题!谢谢啊! - abdalrahman alenzi
8
“flutter build --multidex” 这个命令没有生效,你需要使用 “flutter build apk --multidex” 命令。记得保持原意并尽可能使语言简单易懂。 - Adnan

17

使用 flutter cleanflutter pub get

然后你将收到一个提示,告诉你是否需要安装它。 输入 y (yes) 来进行安装,然后使用 flutter run 命令。


我在“flutter run”时得到了提示,而不是“flutter build”(flutter 3.13.2,在macOS 13.5.1上),但这是正确的方式。 - undefined

10

我在Mac M1(2021年)上遇到了同样的问题。为了在安卓设备上进行调试,我对@AntEdode的解决方案进行了扩展:

flutter build apk --multidex --debug

在构建时,相同的错误将弹出,但SDK现在会询问您是否要安装multidex:

[!] App requires Multidex support
    Multidex support is required for your android app to build since the number of methods has exceeded 64k. You may pass the --no-multidex
    flag to skip Flutter's multidex support to use a manual solution.

    Flutter tool can add multidex support. The following file will be added by flutter:

        android/app/src/main/java/io/flutter/app/FlutterMultiDexApplication.java

Do you want to continue with adding multidex support for Android? [y|n]: 

确认后 - 完成。
✓  Built build/app/outputs/flutter-apk/app-debug.apk.

在模拟器上运行:
flutter run --multidex   

有关详细说明,请参阅Flutter官方文档:https://docs.flutter.dev/deployment/android#enabling-multidex-support - Yonatan

9
在Android项目中,当你拥有大量的方法并超过Dalvik可执行文件(DEX)格式所施加的64k方法限制时,通常需要使用Multidex。在Flutter项目中,当使用大量插件或添加许多依赖项时,您可能会遇到此问题。以下是如何将Multidex添加到您的Flutter项目中:
1. 在VS code或您喜欢的IDE中打开您的Flutter项目。 2. 导航到`android` -> `app` -> `build.gradle`。 3. 在`android/app/build.gradle`文件中,在`android`块中添加以下行:
android {
    ...
    defaultConfig {
        ...
        multiDexEnabled true
    }
    ...
}

4. 重新启动你的应用程序。

4
我在直接调试设备时遇到了类似的错误。由于在VS Code调试控制台中显示了错误,所以没有显示启用multidex支持的选项。

cannot prompt without a terminal ui

但是,如果你在终端或者Git Bash中运行flutter run命令,它会提示你是否启用该选项。一旦启用,应用程序将成功构建和安装。

enter image description here


2
在你的Android Studio终端中运行"flutter run --debug"命令,并选择一个Android设备。
你将被提示启用multidex支持,请按y键。
Flutter工具将启用multidex支持并重新构建,然后你就可以开始了!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接