[英]Flutter google_sign_in error : Unable to merge dex
亲爱的 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: 无法合并 dex
尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。 使用 --info 或 --debug 选项运行以获得更多日志输出。
在https://help.gradle.org获取更多帮助
BUILD FAILED in 34s Finished with error: Gradle build failed: 1
我使用'flutter create'
重现了错误,然后在代码codelab
https://codelabs.developers.google.com/codelabs/flutter-firebase/#4之后添加了Firebase
功能
这是对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
}
应用程序 build.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、build-tools 27.0.2 • Java 二进制文件:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java • Java 版 OpenJDK 运行时环境(build 1.8.0_152-release-915- b08)
[✓] iOS 工具链 - 为 iOS 设备开发 (Xcode 9.2) • Xcode 位于 /Applications/Xcode.app/Contents/Developer • Xcode 9.2,构建版本 9C40b • ios-deploy 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
。
谢谢你的帮助!
我也有同样的问题,我读到你必须在 app\\build.gradle defaultConfig 部分包含 multiDexEnabled true 。 这对我有用。
此错误意味着您的某些依赖项使用了不同版本的 google play 服务。
您必须降级/升级插件以统一使用的版本
minSdkVersion
android/app/build.gradle
minSdkVersion
从 16 更改为 21
最终版本
cloud_firestore: ^0.8.2+3
classpath 'com.google.gms:google-services:3.2.1' // Google Services plugin
targetSdkVersion 27
minSdkVersion 21
已解决:插件和框架之间使用的版本不兼容。 Google SignIn 插件 0.4.0 及更高版本应与使用flutter create
在其最新版本中flutter create
新项目一起使用。
codelab
不再有效,应该更新。
这个链接为我解决了同样的问题。
首先,我将 pubspec.yaml 中的依赖项设置为
dependencies:
flutter:
sdk: flutter
cloud_firestore: ^0.8.2
并在我的 IDE 的终端中运行flutter packages get
。
我还必须更改最低目标 SDK 版本:
仅此一项就可以解决您的问题; 但是我还必须执行以下操作,因为我的某些依赖版本不匹配。
我必须打开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 模拟器上运行了。
如果您遇到困难,该链接有更完整的演练。
另外,请注意,我不必将 multiDexEnabled 设置为 true。
这里的问题可能是您依赖的插件具有冲突的 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' } }
原因是您使用了不同版本的依赖项。 要解决此问题,请转到您的项目/App/src/ 并打开 Build.gradle。 然后在默认配置部分中添加 multiDexEnabled true 行。
例如:像这样 defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true }
我在我的 flutter 应用程序中添加了 admob_flutter: ^0.3.4 但没有在任何地方使用。 从 pubspec.yaml 文件中删除对我有用。
我在 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'
}
它对我有用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.