Флаттер | Плагин Android Gradle поддерживает только плагин Kotlin Gradle версии 1.3.0 и выше

Я пытаюсь добавить зависимости firebase. Когда я бегу flutter run я получаю

The Android Gradle plugin supports only Kotlin Gradle plugin version 1.3.0 and higher.
The following dependencies do not satisfy the required version:
project ':google_api_availability' -> org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.71

Pubscec.yaml

dependencies:
  flutter:
    sdk: flutter
  firebase_auth: ^0.8.1
  google_sign_in: ^4.0.1
  cloud_firestore: ^0.9.0+1
  firebase_core: ^0.3.0+1
  firebase_storage: ^2.0.1
  cupertino_icons: ^0.1.2
  font_awesome_flutter: ^8.0.1
  country_code_picker: ^1.1.0
  fluttertoast: ^2.0.7
  image_picker: ^0.4.6
  shared_preferences: ^0.4.2
  cached_network_image: ^0.4.1
  intl: ^0.15.7
  geolocator: ^2.1.1
  http: ^0.11.3+14
  flutter_google_places: ^0.1.4+1
  location: ^1.1.6
  uuid: ^1.0.3
  auto_size_text: 0.3.0

build.gradle

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.1'
        classpath 'com.google.gms:google-services:4.2.0'
    }
}

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.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 28

    lintOptions {
        disable 'InvalidPackage'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.example.myapp"
        minSdkVersion 16
        targetSdkVersion 28
        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.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
apply plugin: 'com.google.gms.google-services'  // Gradle plugin

Обсуждения в Есть похожие проблемы, обсуждение которых может помочь github.com/флаттер/флаттер/вопросы/26889, github.com/флаттер/флаттер/вопросы/26145, github.com/флаттер/флаттер/вопросы/23626 может помочь разобраться.

Günter Zöchbauer 14.02.2019 16:33
9
1
23 787
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Ответ принят как подходящий

Вы можете узнать, от какого пакета зависит google_api_availability, запустив flutter packages pub deps в корне проекта — это отобразит все прямые и транзитивные зависимости вашего проекта в виде дерева.

Я не смог найти способ отобразить зависимости пакета от плагинов — я думаю, вы узнаете об этом только после того, как попытаетесь его собрать.

Проблема в том, что вы используете версию 3.3.1 плагина Android Gradle, которая использует Kotlin 1.3.0 или выше. В то же время пакет geolocator зависит от google_api_availability, который, похоже, использует Kotlin 1.2.71. На данный момент нет версии google_api_availability, использующей Kotlin 1.3.0 или выше, поэтому у вас есть только 1 решение — понизить версию плагина Android Gradle до версии 3.2.1.

The Android Gradle plugin supports only Kotlin Gradle plugin version 1.3.0 and higher.
The following dependencies do not satisfy the required version:
project ':google_api_availability' -> org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.71

Решение, которое мы использовали, заключалось в том, чтобы включить пакет и все его зависимости непосредственно в среду сборки флаттера. !! Это может быть не идеально в долгосрочной перспективе, но поможет вам, пока происходит миграция AndroidX и возится с вашими сборками.

В pubspec.yaml мы включили определенные версии, такие как

geolocator: 3.0.0               # AndroidX - Breaking! 
google_api_availability: 1.0.6  # Geolocator Dependency. 
meta: 1.1.6                     # Geolocator Dependency. 
permission_handler: 2.2.0       # Geolocator & Meta Dependency.

Поломка для нас произошла между google_api_availability v1.0.6 и v2.0.0.

Вы можете узнать, какой пакет зависит от google_api_availability, выполнив действия, как говорит Овидиу, или открыв https://pub.dartlang.org/ и набрав «dependency:google_api_availability» в строке поиска. Также на каждой странице пакета можно посмотреть зависимости и кто от них зависит.

На данный момент это лучший подход. Достаточно просто добавить google_api_availability: 1.0.6 в pubspec.yaml.

yvan vander sanden 24.02.2019 13:21

Моя проблема началась с раннего закрытия HTTP-соединения. Затем каким-то образом эта проблема изменилась на проблему с Android X.

Чтобы решить эту проблему с Android X, я выполнил шаги https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility#not-recommended-manually-migrate-your-app, но вместо этого это привело меня к другой проблеме с версией. Я использовал геолокатор 1.6.3 и вызывал API Google, разработанный в kotlin 1.2.x. Для текущей версии 3.4.1 требуется kotlin 1.3.1 и выше, но это невозможно. Так что было узкое место версии.

Так

  • Я ухудшил Gradle до 3.3.0, и проблема с геолокатором была решена.
  • наконец, я обновил геолокатор до 5.0.1 и gradle до 3.4.1, и все было решено.

В папке Android вы увидите файл с именем build.gradle.

Вы бы увидели кусок кода

buildscript {
    ext.kotlin_version = 'x.x.xx'
    repositories {
        google()
        jcenter()
    }

отредактируйте версию свойства ext.kotlin_version, заменив x.x.xx на 1.3.10

Это должно помочь вам устранить ошибку

Мне просто нужно было изменить kotlin_version в файле android/build.gradle:

buildscript {
    // change here:
    ext.kotlin_version = '1.3.21'
    dependencies {
        // kotlin version is used here:
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

После изменений в BuildScript и зависимостях ошибка исчезла.

Проблема в том, что вы являетесь версией используя версию 3.3.1 или выше плагина Android Gradle, который требует наличия Kotlin 1.3.0 или выше. так что у вас есть только одно решение - понизить версию Плагин Android Gradle для версии 3.2.1.

Перейдите во Внешние библиотеки/Плагины Flutter/google_api_availability/android/build.gradle и измените ext.kotlin_version на LATEST_VERSION.

   buildscript {
    ext.kotlin_version = '1.6.10' //-> i added
    repositories {
        google()
        mavenCentral()
    }

dependencies {
  classpath 'com.android.tools.build:gradle:4.1.3'
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"//->added

}

Просто добавил две строки выше в build.gradle, и это сработало. Даже если есть предупреждение типа «Версия Kotlin, используемая для сборки с помощью Gradle (1.6.10), отличается от версии, встроенной в плагин IDE (1.3.72)». В любом случае, я думаю, что мне нужно скоро обновить плагин IDE.

Другие вопросы по теме