问题描述
我在 Android Studio 中使用 Flutter 编译 gradle 时出现以下错误:
I'm getting the following error compiling with gradle using Flutter in Android Studio:
Dex: Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/zzcew;
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/zzcew;
[... stacktrace omitted for brevity ...]
* What went wrong:
Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/zzcew;
简短版本
这只有在我添加足够的依赖项时才会发生,正如预期的那样.我已经启用了 multidex 并按照说明在 Android 项目 build.gradle
文件中添加了 multidex 依赖项 (https://developer.android.com/studio/build/multidex.html),但不确定如何处理为 multidex 配置您的应用程序"中的第 2 步对于 Flutter 应用程序,甚至该步骤的遗漏是否是问题所在.
The short version
This only occurs if I add enough dependencies, as might be expected. I've enabled multidex and added the multidex dependency in the Android project build.gradle
file as per instructions (https://developer.android.com/studio/build/multidex.html), but wasn't sure what to do about step 2 in "Configure your app for multidex" for a Flutter App, or even whether the omission of that step was the problem.
- 从工具栏中选择
File/New/New Flutter Project
- 选择Flutter 应用程序"
- 包括 Kotlin 和Swift 支持
- 检查应用程序编译和运行
将以下内容添加到
pubspec.yaml
中的依赖项:
dependencies:
flutter_google_place_picker: "^0.0.1"
location: "^1.2.0"
Packages Get
或者在项目目录下运行flutter packages get
修改android/app/build.gradle
,在适当的地方添加以下部分:
Packages Get
in Android Studio or run flutter packages get
in the project directoryModify android/app/build.gradle
to add the following sections in the appropriate places:
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
android {
defaultConfig {
multiDexEnabled true
}
}
Run/Run
我尝试过的其他事情
用以下各项替换
build.gradle
中的compile"依赖项:
Replacing the "compile" dependency in
build.gradle
with each of the following:
compile 'com.android.support:multidex:1.0.3'
implementation 'com.android.support:multidex:1.0.1'
implementation 'com.android.support:multidex:1.0.3'
按照我的每个依赖项的 multidex 步骤;即修改他们的 build.gradle
文件,启用 multidex 并添加 multidex 依赖项.
Following the multidex steps for each of my dependencies; i.e. modifying their build.gradle
files, enabling multidex and adding the multidex dependency.
根本不启用 multidex(即跳过重新创建的第 7 步).这会导致以下错误:
Not enabling multidex at all (i.e. skipping step 7 of recreating). This results in the following error:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
Flutter Doctor 输出
$ flutter doctor -v
[√] Flutter (Channel beta, v0.2.8, on Microsoft Windows [Version 10.0.16299.371], locale en-GB)
• Flutter version 0.2.8 at D:flutter
• Framework revision b397406561 (2 weeks ago), 2018-04-02 13:53:20 -0700
• Engine revision c903c217a1
• Dart version 2.0.0-dev.43.0.flutter-52afcba357
[√] Android toolchain - develop for Android devices (Android SDK 27.0.3)
• Android SDK at C:UsersDaveAppDataLocalAndroidsdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-27, build-tools 27.0.3
• Java binary at: D:AndroidDevjreinjava
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)
• All Android licenses accepted.
[√] Android Studio (version 3.1)
• Android Studio at D:AndroidDev
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)
[√] Connected devices (1 available)
• Android SDK built for x86 64 • emulator-5554 • android-x64 • Android 5.1.1 (API 22) (emulator)
• No issues found!
推荐答案
您的两个包似乎在传递依赖项上存在分歧.一个想要 11.6.+,另一个想要 11.+ 的一些播放服务依赖项.由于 11.6.2 和 11.8.0 都已发布,因此最终会发生冲突.
Your two packages seem to disagree on their transitive dependencies. One wants 11.6.+, the other wants 11.+ of some play-services dependencies. Since both 11.6.2 and 11.8.0 are out there, this is going to end up with a conflict.
如果您在 android/
文件夹中运行 ./gradlew androidDependencies
,您将获得依赖项解析结果的列表,其中包含以下内容:
If you run ./gradlew androidDependencies
in your android/
folder, you get a listing of the result of dependency resolution, containing, among others, the following:
+--- :flutter_google_place_picker (variant: release)
+--- com.google.android.gms:play-services-location:11.8.0@aar
+--- com.google.android.gms:play-services-places:11.6.2@aar
+--- com.google.android.gms:play-services-maps:11.6.2@aar
+--- com.google.android.gms:play-services-base:11.8.0@aar
+--- com.google.android.gms:play-services-tasks:11.8.0@aar
+--- com.google.android.gms:play-services-basement:11.8.0@aar
这些 11.6.2 和 11.8.0 包不会一起工作.要解决此问题,您需要修补依赖项以使其彼此一致,或者在 android/app/build.gradle
文件的顶层添加依赖项覆盖并希望最好:
These 11.6.2 and 11.8.0 packages are not going to work together. To resolve this, you need to patch your dependencies to be consistent with each other, or add a dependency override to the top level of your android/app/build.gradle
file and hope for the best:
configurations.all {
resolutionStrategy {
force 'com.google.android.gms:play-services-places:11.8.0'
force 'com.google.android.gms:play-services-location:11.8.0'
}
}
这篇关于Flutter 的 Multidex 问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!