我在Android Studio中使用Ffltter使用Gradle编译时出现以下错误:

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,并按照说明(https://developer.android.com/studio/build/multidex.html)在Android项目build.gradle文件中添加了multidex依赖项,但我不确定如何处理"将您的应用程序配置为Multidex"中的步骤2,甚至不确定该步骤的遗漏是否是问题所在.

重新创建的步骤:

  1. 从工具栏中 Select File/New/New Flutter Project
  2. Select "Flutter 应用"
  3. 包括Kotlin&SWIFT支持
  4. 判断应用程序是否编译并运行
  5. 将以下内容添加到pubspec.yaml中的依赖项中:

    dependencies:
      flutter_google_place_picker: "^0.0.1"
      location: "^1.2.0"
    
  6. 在Android Studio中点击Packages Get或在项目目录中运行flutter packages get
  7. 修改android/app/build.gradle,在适当位置增加以下章节:

    dependencies {
      compile 'com.android.support:multidex:1.0.1'
    }
    android {
        defaultConfig {
            multiDexEnabled true
        }
    }
    
  8. 从工具栏中 Select Run/Run

我试过的其他东西

  1. build.gradle中的"编译"依赖项替换为以下各项:

    compile 'com.android.support:multidex:1.0.3'
    implementation 'com.android.support:multidex:1.0.1'
    implementation 'com.android.support:multidex:1.0.3'
    
  2. 遵循我的每个依赖项的多重索引步骤;即修改它们的build.gradle个文件,启用多重索引并添加多重依赖项.

  3. 将我的项目及其依赖项的build.gradle个文件中的每个文件中的minSdkVersion修改为21和27中的每一个,并为它们启用Multidex.
  4. 为我的项目启用缩小功能.
  5. geolocation: "^0.2.1"代替location: "^1.2.0"
  6. 根本不启用Multidex(即跳过重新创建的步骤7).这会导致以下错误:

    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 指示器输出

$ 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!

推荐答案

您的两个包似乎在它们的传递依赖关系上存在分歧.一个人想要11.6+,另一个人想要11.6+的一些游戏服务依赖性.由于11.6.2和11.8.0都存在,这将以冲突告终.

如果在android/文件夹中运行./gradlew androidDependencies,则会得到依赖项解析结果的列表,其中包含以下内容:

+--- :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文件的顶层,并期待最好的结果:

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相关问答推荐

如何增加容器高度?

如何让GridView.builder用另外两个小部件来占据屏幕的剩余部分

文本未设置在集装箱摆动的中心

自定义ItemBuilderFlutter

将记录/元组用作SplayTreeMap中的键

在Ffltter中,我已经使用了Ffltter_BLOC Cupit和Pusher,但当获得新数据时,UI没有更新

在Flutter 中创建自定义形状

从future 列表到流列表Flutter Firebase

Flutter:如何在 Future 函数上添加网络判断和 showDialog

尽管海拔设置为 0,如何删除 appBar 下的下划线

创建混合 TextWidget 和 TextFieldWidget

splash_screen 没有被推送到登录页面

在 Flutter 中显示有关提供者通知的对话框

切换 Firebase 项目后 Flutter FirebaseAuthException 'configuration-not-found'

无法使用 bloc 更新 ListView.builder 的特定时间

graphql_flutter 错误:非抽象类GraphQLWebSocketChannel缺少实现

String类型不是Widget类型的子类型?在dart 中

SfCircularChart 周围的额外间距

配置项目:firebase_core时出现问题

Flutter 在气泡聊天消息上对齐时间戳文本