颤振Android Gradle插件仅支持1.3.0及更高版本的Kotlin Gradle插件

时间:2019-02-14 15:14:46

标签: android gradle build flutter

我正在尝试添加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
}

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

7 个答案:

答案 0 :(得分:5)

您可以通过在项目的根目录上运行google_api_availability来找到哪个软件包依赖于flutter packages pub deps-这将在树状视图中列出项目的所有直接和传递依赖项。

我找不到显示包的插件依赖项的方法-我想您只有在尝试构建它时才会发现。

问题是您使用的是Android Gradle插件的3.3.1版本,该版本强制使用Kotlin 1.3.0或更高版本。同时,geolocator包依赖于google_api_availability,它似乎正在使用Kotlin 1.2.71。目前尚无使用Kotlin google_api_availability或更高版本的1.3.0版本,因此您只有1种解决方案-将Android Gradle插件降级为3.2.1版本。

答案 1 :(得分:3)

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

我们使用的解决方案是将软件包及其所有依赖项直接包含在flutter构建环境中。 !!从长远来看,这可能不是理想的选择,但在这种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之间

您可以按照Ovidiu所说的进行操作,或者打开https://pub.dartlang.org/并在搜索栏中输入“ dependency:google_api_availability”,以找到哪个软件包取决于google_api_availability。另外,在每个软件包页面上,您都可以看到依赖关系以及依赖它们的人。

答案 2 :(得分:2)

在android文件夹中,您将看到名为build.gradle的文件

您会看到一段代码

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

通过将x.x.xx替换为1.3.10来编辑ext.kotlin_version属性的版本

这应该可以帮助您解决错误

答案 3 :(得分:0)

我的问题开始于HTTP连接过早关闭。然后,该问题以某种方式变为Android X问题。

要解决此android x问题,我遵循了https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility#not-recommended-manually-migrate-your-app的步骤,但是,这却导致了另一个版本问题。我使用的是geolocator 1.6.3,那是在kotlin 1.2.x中调用的Google API。当前的gradle 3.4.1需要kotlin 1.3.1及更高版本,但这是不可能的。因此存在版本的瓶颈。

所以

    我将gradle降级到3.3.0,解决了Geolocator问题。
  • 最后,我将geolocator升级到5.0.1,并将gradle升级到3.4.1,一切都解决了。

答案 4 :(得分:0)

我只需要在android / build.gradle文件中更改kotlin_version:

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和依赖项中进行更改之后,错误消失了。

答案 5 :(得分:0)

转到外部库/ Flutter插件/ google_api_availability / android / build.gradle并将ext.kotlin_version更改为LATEST_VERSION。

答案 6 :(得分:-1)

问题是您使用的是Android Gradle插件的3.3.1版或更高版本,该插件必须具有Kotlin 1.3.0或更高版本。因此只有一种解决方案-将 Android Gradle插件降级为3.2.1 版本。