【问题标题】:Flutter Build failed with an exception for Geolocation pluginFlutter Build 失败,出现 Geolocation 插件异常
【发布时间】:2018-11-17 17:42:51
【问题描述】:

每当我尝试包含颤振 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 dart-pub flutter-dependencies


【解决方案1】:

我可以建议三件事来提供帮助。第一种是通过首先运行flutter clean 然后再次运行来进行完全重建。有时,flutter 和 android 之间的事情会有些混乱,这会有所帮助。

接下来我要做的是检查您是否获得了所有 Play 服务的相同版本。由于某种原因,gradlew 有时会搞砸。从android(或./gradlew,如果你在mac/linux上)运行gradlew app:dependencies。如果您获得不同的版本,请将它们全部添加为同一版本的依赖项。

例如,在我的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,因为它是 geolocation 包的依赖项。 com.android.support 库也是如此。

如果这仍然不起作用,请尝试直接运行 gradle 构建,特别是查看堆栈跟踪(android 文件夹中的gradlew app:build --stacktrace),看看它是否告诉您任何信息。然后,您可以发布该问题,或查看通用的 Android 问题以寻求解决方案。可能是您需要启用多 dex,尽管我不这么认为。

【讨论】:

  • 感谢您提供此信息。但是,对所有这些级别的 android 配置内容并不十分熟悉。我试过flutter clean。但是,那没有用。试图运行那些 gradlew app:dependencies./gradlew 命令,但那些也没有工作。也许我需要在我的系统上安装 Gradle。但 Gradle 网站似乎从昨天开始下降。我已经在我的帖子中发布了我的 app>build.gradle 文件。有什么问题,可能导致这个问题。
【解决方案2】:

我认为这是 Firebase 的地理定位 gradle 版本和您的颤振版本不兼容的问题。尝试将 multiDexEnabled true 添加到您的构建 gradle 中。如果这不能解决它,请在 android studio 中打开您的 flutters android 项目,然后转到 geolocation build gradle 并将依赖项版本更改为 classpath 'com.android.tools.build:gradle:3.1.2' 并在底部将播放服务更新为 api "com.google.android.gms:play-services-location:15.+"

【讨论】:

    【解决方案3】:

    最后,我按照@rmtmckenzie 提到的步骤解决了这个问题。

    在我的android/app/build.gradle 中,我添加了以下代码 &

    configurations.all {
        resolutionStrategy {
            force 'com.google.android.gms:play-services-location:15.0.1'
        }
    }
    

    并启用multiDexEnabled true

    defaultConfig {
        multiDexEnabled true
    }
    

    现在有了这个设置,我的整个应用程序运行良好。

    【讨论】:

      【解决方案4】:

      在您应用的顶级 build.gradle 更新类路径。为了我 类路径 'com.android.tools.build:gradle:3.5.3' 工作正常。

      【讨论】:

        猜你喜欢
        • 2020-06-29
        • 2019-07-19
        • 2022-07-07
        • 2019-02-23
        • 2022-01-06
        • 2023-02-15
        • 2020-06-13
        • 2021-01-25
        • 2021-09-24
        相关资源
        最近更新 更多