【问题标题】:Flutter google_sign_in error : Unable to merge dexFlutter google_sign_in 错误:无法合并 dex
【发布时间】:2018-06-12 03:45:25
【问题描述】:

亲爱的 Flutter 社区,

我正在努力完成一项看似简单的任务。 我想在我的应用程序中添加firebase 身份验证。它适用于iOS,但当我尝试为android 实现它时,我系统地得到了错误:

在为 x86 构建的 Android SDK 上以调试模式启动 lib/main.dart... 正在初始化 gradle... 解决依赖关系... 运行 'gradlew assembleDebug'... 项目 ':app' 中的配置 'compile' 是 已弃用。请改用“实施”。 registerResGeneratingTask 是 已弃用,使用 registerGeneratedFolders(FileCollection) registerResGeneratingTask 已弃用,请使用 registerGeneratedFolders(FileCollection) registerResGeneratingTask 是 已弃用,使用 registerGeneratedFolders(FileCollection) 配置 项目“:google_sign_in”中的“编译”已弃用。采用 改为“实施”。

FAILURE:构建失败并出现异常。

  • 出了什么问题:任务 ':app:transformDexArchiveWithExternalLibsDexMergerForDebug' 执行失败。

    java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: 无法合并 索引

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。

  • 通过https://help.gradle.org获得更多帮助

BUILD FAILED in 34s Finished with error: Gradle build failed: 1

我使用'flutter create' 重现了错误,然后在codelab 之后添加Firebase 功能 https://codelabs.developers.google.com/codelabs/flutter-firebase/#4

这里是对pubspec.yaml的唯一修改

dependencies:
  flutter:
    sdk: flutter
  google_sign_in: 0.3.1 # ONLY MODIFICATION
  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.0

一般build.gradle:

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.google.gms:google-services:3.1.0' #ONLY MODIF
    }

}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

应用构建.gradle:

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withInputStream { stream ->
        localProperties.load(stream)
    }
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.3'

    lintOptions {
        disable 'InvalidPackage'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.mycompany.test"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
        }
    }
}

flutter {
    source '../..'
}

dependencies {
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

}

apply plugin: 'com.google.gms.google-services'

这是颤振医生的输出:

[✓] Flutter(在 Mac OS X 10.13.2 17C88 上,语言环境 fr-BE,频道主控) • Flutter 在 /Users/sergebesnard/flutter • 框架修订 4d2c2aaaa1(6 天前),2017-12-27 07:30:31 -0800 • 引擎修订版 7c126001d8 • 工具 Dart 版本 1.25.0-dev.11.0 • 引擎 Dart 版本 2.0.0-edge.9e8a3e2d31621c1bdf6139d068e7898a2ac2ab5a

[✓] Android 工具链 - 为 Android 设备开发(Android SDK 27.0.2) • Android SDK 位于 /Users/sergebesnard/Library/Android/sdk • 未配置 Android NDK 位置(可选;对原生分析支持有用) • 平台 android-27,构建工具 27.0.2 • Java 二进制文件位于:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java • Java 版 OpenJDK 运行时环境(内部版本 1.8.0_152-release-915-b08)

[✓] iOS 工具链 - 为 iOS 设备开发 (Xcode 9.2) • Xcode 位于 /Applications/Xcode.app/Contents/Developer • Xcode 9.2,内部版本 9C40b • ios 部署 1.9.2 • CocoaPods 1.3.1 版

[✓] Android Studio(3.0版) • Android Studio 位于 /Applications/Android Studio.app/Contents • Java 版 OpenJDK 运行时环境(内部版本 1.8.0_152-release-915-b08)

[✓] IntelliJ IDEA 社区版(2017.2.5 版) • Flutter 插件版本 18.0 • Dart 插件版本 172.4155.35

[✓] 连接的设备 • 为 x86 构建的 Android SDK • emulator-5554 • android-x86 • Android 8.0.0 (API 26)(模拟器)

我显然是 Android 开发的新手,并且不希望成为专家来使教程正常工作。我发现的每个解决方案都需要修改.gradle files,并且仅适用于react-native

感谢您的帮助!

【问题讨论】:

  • build.gradle的依赖在哪里?
  • 我应该补充一下我还没有修改源代码,在上面的修改之前它就像一个魅力。
  • @Heisen-Berg,你指的是什么?我复制了整个内容,每个文件都有依赖关系。
  • 我遇到了这个问题,尽管我使用了所有最新的库,我发现特别是在应用程序 build.gradle 底部包含应用插件行是导致失败

标签: android firebase android-gradle-plugin flutter


【解决方案1】:

此错误表示您的某些依赖项使用了不同版本的 google play 服务。

您必须降级/升级插件以统一使用的版本

【讨论】:

    【解决方案2】:

    已解决:插件和框架之间使用的版本不兼容。 Google SignIn 插件 0.4.0 及更高版本应与使用最新版本的 flutter create 创建的新项目一起使用。

    codelab 不再有效,应该更新。

    【讨论】:

      【解决方案3】:

      这里的问题可能是你所依赖的插件有冲突的gradle依赖。

      此 SO 答案https://stackoverflow.com/a/49901209/90918 提供了有关如何通过查找冲突的依赖项并覆盖它们来解决此问题的描述。

      引用原答案:

      您的两个包似乎在传递依赖方面存在分歧。 一个想要 11.6.+,另一个想要 11.+ 的一些游戏服务 依赖关系。由于 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'
          }
      }
      

      【讨论】:

        【解决方案4】:

        我也遇到了同样的问题,我读到您必须在 app\build.gradle defaultConfig 部分中包含 multiDexEnabled true 。这对我有用。

        【讨论】:

          【解决方案5】:

          原因是您使用了不同版本的依赖项。要解决此问题,请转到您的项目/App/src/ 并打开 Build.gradle。然后在默认配置部分添加 multiDexEnabled true 行。

          例如:像这样 默认配置 { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled 真 }

          【讨论】:

            【解决方案6】:

            link 为我解决了同样的问题。

            首先我将 pubspec.yaml 中的依赖项设置为

            dependencies:
              flutter:
                sdk: flutter
              cloud_firestore: ^0.8.2 
            

            并在我的 IDE 终端中运行 flutter packages get

            我还必须更改最低目标 SDK 版本:

            1. 打开android/app/build.gradle,然后找到上面写着的那一行 minSdkVersion 16.
            2. 将该行更改为 minSdkVersion 21。
            3. 保存文件。

            仅此一项就可以解决您的问题;但是我还必须执行以下操作,因为我的一些依赖版本不匹配。

            我必须打开android/app/build.gradle,然后将以下行添加到文件的最后一行: apply plugin: 'com.google.gms.google-services'

            接下来,我必须打开android/build.gradle,然后在 buildscript 标签内,添加一个新的依赖项:

            buildscript {
               repositories {
                   // ...
               }
            
               dependencies {
                   // ...
                   classpath 'com.google.gms:google-services:3.2.1'   // new
               }
            }
            

            在此之后,我的应用程序终于在 android 模拟器上运行了。

            如果您遇到困难,link 有更完整的演练。

            另外,需要注意的是,我不必将 multiDexEnabled 设置为 true。

            【讨论】:

              【解决方案7】:

              android/app/build.gradle 中的 minSdkVersion 从 16 更改为 21



              最终版本

              • pubspec.yaml
                • cloud_firestore: ^0.8.2+3
              • android/build.gradle
                • classpath 'com.google.gms:google-services:3.2.1' // Google Services plugin
              • android/app/build.gradle
                • targetSdkVersion 27
                • minSdkVersion 21

              【讨论】:

                【解决方案8】:

                我在我的颤振应用程序中添加了 admob_flutter: ^0.3.4 但没有在任何地方使用。从 pubspec.yaml 文件中删除对我有用。

                【讨论】:

                  【解决方案9】:

                  我遇到了同样的问题 我在 android/defaultConfig 上的 App/build.gradle 上添加了这一行:

                      multiDexEnabled true
                  

                  依赖关系

                      implementation 'androidx.multidex:multidex:2.0.1'
                  

                  App/build.gradle 看起来像这样:

                  def localProperties = new Properties()
                  ...
                  
                  android {
                      compileSdkVersion 28
                  
                      sourceSets {
                          main.java.srcDirs += 'src/main/kotlin'
                      }
                  
                      lintOptions {
                          disable 'InvalidPackage'
                      }
                  
                      defaultConfig {
                          ....
                          versionName flutterVersionName
                          testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
                          multiDexEnabled true
                      }
                  
                  
                  flutter {
                      source '../..'
                  }
                  
                  dependencies {
                      implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
                      .....
                      implementation 'androidx.multidex:multidex:2.0.1'
                  }
                  

                  对我有用

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2018-08-17
                    • 1970-01-01
                    • 1970-01-01
                    • 2018-05-04
                    • 1970-01-01
                    • 1970-01-01
                    • 2018-08-06
                    • 2018-02-26
                    相关资源
                    最近更新 更多