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;
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.
Steps to recreate:
- Select
File/New/New Flutter Project
from the toolbar - Select "Flutter Application"
- Include Kotlin & Swift support
- Check the app compiles and runs
Add the following to dependencies in
pubspec.yaml
:dependencies: flutter_google_place_picker: "^0.0.1" location: "^1.2.0"
- Hit
Packages Get
in Android Studio or runflutter packages get
in the project directory Modify
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 } }
- Select
Run/Run
from the toolbar
Other things I've tried
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'
Following the multidex steps for each of my dependencies; i.e. modifying their
build.gradle
files, enabling multidex and adding the multidex dependency.- Modifying minSdkVersion to each of 21 and 27 in each of the
build.gradle
files for my project and its dependencies, and enabling multidex for them. - Enabling minifying for my project.
- Replacing
location: "^1.2.0"
withgeolocation: "^0.2.1"
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 output
$ 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:\Users\Dave\AppData\Local\Android\sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-27, build-tools 27.0.3
• Java binary at: D:\AndroidDev\jre\bin\java
• 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!