Flutter Build 失败,Geolocation 插件出现异常
Flutter Build failed with an exception for Geolocation plugin
每当我尝试包含 flutter geolocation
(https://github.com/loup-v/geolocation) 插件时,我都会遇到以下错误。
Initializing gradle...
Resolving dependencies...
Running 'gradlew assembleDebug'...
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
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
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
* Get more help at https://help.gradle.org
BUILD FAILED in 3s
Finished with error: Gradle build failed: 1
我的 pubspec.yml
依赖列表是
dependencies:
flutter:
sdk: flutter
google_sign_in: "^3.0.2"
firebase_auth: "^0.5.5"
shared_preferences: "^0.4.1"
cloud_firestore: "^0.7.2"
firebase_storage: "^0.2.5"
image_picker: "^0.4.1"
progress_hud: "^0.2.2"
cached_network_image: "^0.4.1"
intl: "^0.15.6"
path: "^1.5.1"
geolocation: "^0.2.1"
我的app>build.gradle
代码
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
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 27
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.bhramaan.bhramaan"
minSdkVersion 16
targetSdkVersion 27
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 clean
然后再 运行 进行完全重建。有时,flutter 和 android 之间的事情会变得有点混乱,这会有所帮助。
接下来我要做的是检查您获得的所有 Play 服务的版本是否相同。出于某种原因 gradlew 有时会搞砸。 运行 gradlew app:dependencies
来自 android
(或者 ./gradlew
,如果你在 mac/linux)。如果您获得不同的版本,请将它们全部添加为同一版本的依赖项。
例如,在我的 android/app/build.gradle
中,我必须设置
implementation 'com.google.android.gms:play-services-base:15.0.2'
implementation 'com.google.android.gms:play-services-vision:15.0.2'
尽管 Gradle 应该已经解决了这个问题。特别要注意 com.google.android.gms:play-services-location
因为它是地理定位包的依赖项。 com.android.support
库也是如此。
如果仍然无效,请尝试 运行 直接构建 gradle,特别是查看堆栈跟踪(gradlew app:build --stacktrace
来自 android
文件夹) 看看它是否告诉你什么。然后,您可以 post 那个,或者查看通用的 Android 问题以获得解决方案。可能是你需要启用 multi-dex,虽然我不这么认为。
我认为这是 firebase 的地理定位 gradle 版本与您的 flutter 版本不兼容的问题。尝试将 multiDexEnabled true
添加到您的构建 gradle 中。如果这不能解决它,请在 android studio 中打开您的 flutters android 项目并转到地理定位构建 gradle 并将依赖项版本更改为 classpath 'com.android.tools.build:gradle:3.1.2'
并在底部更新播放api "com.google.android.gms:play-services-location:15.+"
.
的服务
最后,我按照@rmtmckenzie 提到的步骤解决了这个问题。
在我的 android/app/build.gradle
中,我添加了以下代码 &
configurations.all {
resolutionStrategy {
force 'com.google.android.gms:play-services-location:15.0.1'
}
}
并启用 multiDexEnabled true
defaultConfig {
multiDexEnabled true
}
现在使用此设置,我的整个应用程序运行良好。
在您应用的顶级 build.gradle 更新类路径。为了我
类路径 'com.android.tools.build:gradle:3.5.3' 工作正常。
每当我尝试包含 flutter geolocation
(https://github.com/loup-v/geolocation) 插件时,我都会遇到以下错误。
Initializing gradle...
Resolving dependencies...
Running 'gradlew assembleDebug'...
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
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
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
* Get more help at https://help.gradle.org
BUILD FAILED in 3s
Finished with error: Gradle build failed: 1
我的 pubspec.yml
依赖列表是
dependencies:
flutter:
sdk: flutter
google_sign_in: "^3.0.2"
firebase_auth: "^0.5.5"
shared_preferences: "^0.4.1"
cloud_firestore: "^0.7.2"
firebase_storage: "^0.2.5"
image_picker: "^0.4.1"
progress_hud: "^0.2.2"
cached_network_image: "^0.4.1"
intl: "^0.15.6"
path: "^1.5.1"
geolocation: "^0.2.1"
我的app>build.gradle
代码
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
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 27
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.bhramaan.bhramaan"
minSdkVersion 16
targetSdkVersion 27
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 clean
然后再 运行 进行完全重建。有时,flutter 和 android 之间的事情会变得有点混乱,这会有所帮助。
接下来我要做的是检查您获得的所有 Play 服务的版本是否相同。出于某种原因 gradlew 有时会搞砸。 运行 gradlew app:dependencies
来自 android
(或者 ./gradlew
,如果你在 mac/linux)。如果您获得不同的版本,请将它们全部添加为同一版本的依赖项。
例如,在我的 android/app/build.gradle
中,我必须设置
implementation 'com.google.android.gms:play-services-base:15.0.2'
implementation 'com.google.android.gms:play-services-vision:15.0.2'
尽管 Gradle 应该已经解决了这个问题。特别要注意 com.google.android.gms:play-services-location
因为它是地理定位包的依赖项。 com.android.support
库也是如此。
如果仍然无效,请尝试 运行 直接构建 gradle,特别是查看堆栈跟踪(gradlew app:build --stacktrace
来自 android
文件夹) 看看它是否告诉你什么。然后,您可以 post 那个,或者查看通用的 Android 问题以获得解决方案。可能是你需要启用 multi-dex,虽然我不这么认为。
我认为这是 firebase 的地理定位 gradle 版本与您的 flutter 版本不兼容的问题。尝试将 multiDexEnabled true
添加到您的构建 gradle 中。如果这不能解决它,请在 android studio 中打开您的 flutters android 项目并转到地理定位构建 gradle 并将依赖项版本更改为 classpath 'com.android.tools.build:gradle:3.1.2'
并在底部更新播放api "com.google.android.gms:play-services-location:15.+"
.
最后,我按照@rmtmckenzie 提到的步骤解决了这个问题。
在我的 android/app/build.gradle
中,我添加了以下代码 &
configurations.all {
resolutionStrategy {
force 'com.google.android.gms:play-services-location:15.0.1'
}
}
并启用 multiDexEnabled true
defaultConfig {
multiDexEnabled true
}
现在使用此设置,我的整个应用程序运行良好。
在您应用的顶级 build.gradle 更新类路径。为了我 类路径 'com.android.tools.build:gradle:3.5.3' 工作正常。