Сборка Flutter не удалась, за исключением плагина Geolocation - PullRequest
0 голосов
/ 07 июня 2018

Всякий раз, когда я пытаюсь включить флаттер 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'

Что не так?

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Я полагаю, что это проблема, связанная с тем, что версия firebase, основанная на геолокации, и ваша версия флаттера несовместимы.Попробуйте добавить multiDexEnabled true к вашему сборщику.Если это не решает проблему, откройте ваш проект android Studio в программе android Studio и перейдите к сборке геолокации и измените версию зависимостей на classpath 'com.android.tools.build:gradle:3.1.2', а внизу обновите сервисы воспроизведения до api "com.google.android.gms:play-services-location:15.+".

0 голосов
/ 17 июня 2018

Наконец, я исправил это, выполнив шаги, упомянутые @rmtmckenzie.

В моем android/app/build.gradle я добавил следующий фрагмент кода &

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

и включил multiDexEnabled true

defaultConfig {
    multiDexEnabled true
}

С этим параметром теперь все мое приложение работаетхорошо.

0 голосов
/ 07 июня 2018

Есть три вещи, которые я могу предложить, чтобы помочь.Первый - выполнить полное перестроение, сначала запустив flutter clean, а затем снова запустив.Иногда между флаттером и андроидом что-то путается, и это помогает.

Следующее, что я хотел бы сделать, это проверить, что вы получаете одну и ту же версию всех сервисов 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), чтобы увидеть, говорит ли она вам что-нибудь.Затем вы можете опубликовать это или взглянуть на общие вопросы по Android для решения.Возможно, вам нужно включить multi-dex, хотя я так не думаю.

...