Применение плагина Flutters app_plugin_loader Gradle обязательно с использованием метода Apply script, который устарел и будет удален в будущем выпуске

После обновления версии Flutter до 3.19.0 я получаю это предупреждение при запуске приложения:

Вы применяете плагин Gradle app_plugin_loader Flutter. обязательно использовать метод Apply script, который устарел и будет удалено в будущем выпуске. Переход на применение Gradle плагины с блоком декларативных плагинов: https://flutter.dev/go/flutter-gradle-plugin-apply

Вы обязательно применяете основной плагин Gradle Flutter, используя применить метод сценария, который устарел и будет удален в будущем. будущий выпуск. Перейдите к применению плагинов Gradle с помощью блок декларативных плагинов: https://flutter.dev/go/flutter-gradle-plugin-apply

Как удалить эти устаревшие настройки Gradle.

63
0
81 583
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

Необходимо перенести проект, если он был создан на более старой версии. Вот инструкция: https://docs.flutter.dev/release/breaking-changes/flutter-gradle-plugin-apply.

Для меня эта документация бесполезна. Если применить, я получаю некоторые ошибки, приложение больше не запускается, и я не знаю, как это исправить.

Emaborsa 23.02.2024 14:26

Эта документация полезна; Я рекомендую вам использовать его. Также создайте новый пример проекта, а затем проверьте конфигурации градиента в новом примере проекта. Вместе с документацией ошибка исчезнет.

Samuel Wakoli 24.02.2024 11:40

Я использовал эту документацию для обновления приложения Flutter, более или менее как и ожидалось, но много неправильного пути. Теперь, создавая собственное приложение, использующее модуль flutter, я снова получаю предупреждение, и эта документация бесполезна и приводит к множеству ошибок, начиная с undefined flutter.sdk !

3c71 27.03.2024 16:08

После этого я получаю следующую ошибку: [!] Ваше приложение использует неподдерживаемый проект Gradle. Чтобы решить эту проблему, создайте новый проект, запустив flutter create -t app <app-directory>, а затем переместите код dart, ресурсы и pubspec.yaml в новый проект.

Ten Digit Grid 30.03.2024 22:52

Начиная с Flutter 3.16, проекты, созданные с помощью flutter create, используют Plugin DSL для применения плагинов Gradle. Проекты, созданные с помощью версий Flutter до 3.16, необходимо переносить вручную.

Чтобы выполнить следующие шаги:

Первый шаг : Замените содержимое /android/settings.gradle на приведенное ниже.

Перемещение раздела (Плагины) в новый раздел Ниже одного из фигурных скобок из управления плагинами

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "7.3.0" apply false
    id "org.jetbrains.kotlin.android" version "1.9.22" apply false // Newer Version
}

Добавьте этот раздел в управление плагинами ниже строки >>

includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")

repositories {
    google()
    mavenCentral()
    gradlePluginPortal()
}

Шаг второй: Удалите весь блок buildscript из <app-src/android/build.gradle:

buildscript {
    ext.kotlin_version = '1.7.10'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.3.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

Шаг третий: Удалите этот код, если он найден в <app-src/android/build.gradle:

-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 plugin: 'kotlin-android'
-apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

Последний шаг: в том же файле в первой строке добавьте этот код:

plugins {
    id "com.android.application"
    id "kotlin-android"
    id "dev.flutter.flutter-gradle-plugin"
}

Наконец, вы можете следовать инструкциям из Flutter Docs: Устарело императивное применение плагинов Flutter Gradle

В моем android/app/build.gradle я внес эти изменения, но у меня также был блок зависимости {} в нижней части файла со строкой: implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version", и я изменил его на implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.22". Итак, я хотел спросить, есть ли способ не указывать версию, используя только переменную, содержащую версию Kotlin?

Azashiro Merume 25.02.2024 09:03

на самом деле я пока не знаю, но в последней версии флаттера эта строка должна быть пустой. потому что они переместили его в файл settings.gradle

Mohamed Sonata 25.02.2024 23:48

У меня была такая же проблема, я пытался следовать этим инструкциям, но это не особо помогло, привело к другим проблемам компиляции, потому что в моем файле gradle были и другие настройки.

Проблема была в одном из трёх файлов

  • приложение/build.gradle
  • build.gradle
  • настройки.gradle

После попытки исправить их на основе подсказок, найденных в сети, я попытался полностью удалить их и позволить самому флаттеру создавать их с помощью команды flutter create . --project-name aRandomName. При этом создается много файлов, вы можете удалить все, кроме трех, упомянутых выше. Используя сравнение изменений git, вы можете исправить их, добавив то, чего не хватает, сделав заметки из официальной документации, указанной выше, здесь еще раз.

Обновите флаттер до последней версии затем удалите папку Android в своем проекте затем введите flutter create . в терминале или cmd, если вы используете Windows и готово

Это самое простое и чистое решение. Однако имейте в виду, что вам необходимо скопировать определенные файлы, такие как build.gradle, AndroidManifest.xml и файлы ресурсов, прежде чем удалять существующую папку Android. Более того, если вы изменили имя папки проекта, как это сделал я, вы можете временно изменить его обратно перед запуском flutter create ..

innomatic 06.03.2024 15:55

Удачи в настройке многих вещей с нуля. Худшее решение, за исключением случаев, когда проект был запущен недавно.

Dmitry 13.03.2024 19:45

консоль: для выходного каталога не указана опция. Создайте новый проект Flutter.

Nort 19.04.2024 09:31

у вас будет новая папка Android, и вам придется все перезагрузить.

Seishin Okigaru 20.05.2024 14:31

ПОЧЕМУ

После Flutter 3.16 они представили новый способ применения плагинов Gradle под названием Plugin DSL, прежде чем использовать так называемый сценарий императивного применения. Поэтому всем, кто создавал проект Flutter до версии 3.16, необходимо использовать этот новый метод.

КАК

Сначала в файле settings.gradle уровня вашего проекта удалите весь код и вставьте его.

pluginManagement {
    def flutterSdkPath = {
        def properties = new Properties()
        file("local.properties").withInputStream { properties.load(it) }
        def flutterSdkPath = properties.getProperty("flutter.sdk")
        assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
        return flutterSdkPath
    }()

    includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")

    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version '7.3.0' apply false
    id "org.jetbrains.kotlin.android" version '1.7.10' apply false

}

include ":app"

На уровне проекта build.gradle android/settings.gradle удалите весь блок android/build.gradle.

Вот как выглядит buildscript

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

tasks.register("clean", Delete) {
    delete rootProject.buildDir
}

И на уровне приложения build.gradle android/build.gradle удалите эти 2 блока кода.

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 plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

а также удалите однострочный код в блоке android/app/build.gradle

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

Возможно, вы получили сообщение об ошибке, требующее изменить версию Gradle в dependencies.

Если вы получили эту ошибку, измените и ее.

Для получения дополнительной информации перейдите по этой официальной ссылке .

Теперь я получаю сообщение об ошибке: возникла проблема при оценке проекта «:app». > Не удалось найти метод android() для аргументов [build_cu2n1bhns4wx5avqvxwcpata4$_run_closure2@72306ef] в проекте «:app» типа org.gradle.api.Project. Что мне здесь делать?

kilokahn 05.03.2024 13:23

@kilokahn попробуй это stackoverflow.com/a/37252114/18186375

Adnan K 06.03.2024 07:50

Где информация о добавлении плагинов?

Daksh Gargas 21.03.2024 20:29
Ответ принят как подходящий

Я решил проблему, следуя инструкциям Flutter Docs: https://docs.flutter.dev/release/breaking-changes/flutter-gradle-plugin-apply

Вот что я сделал:

Во-первых, я полностью заменил файл android/settings.gradle следующим образом:

pluginManagement {
def flutterSdkPath = {
    def properties = new Properties()
    file("local.properties").withInputStream { properties.load(it) }
    def flutterSdkPath = properties.getProperty("flutter.sdk")
    assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
    return flutterSdkPath
}()

includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")

repositories {
    google()
    mavenCentral()
    gradlePluginPortal()
}
}

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "{agpVersion}" apply false
    id "org.jetbrains.kotlin.android" version "{kotlinVersion}" apply false
}

include ":app"

Затем внутри файла android/settings.gradle, а точнее внутри plugins{}, я изменил {agpVersion} на 7.2.0 и {kotlinVersion} на 1.7.20.

Затем я удалил весь buildscript{} из android/build.gradle файла. Теперь android/build.gradle выглядит так:

allprojects {
repositories {
    google()
    jcenter()
}
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

tasks.register("clean", Delete) {
    delete rootProject.buildDir
}

Затем внутри файла android/app/build.gradle я удалил несколько строк. Эти строки,

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 plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

Затем в этот файл я добавил несколько строк вверху. Эти строки,

plugins {
    id "com.android.application"
    id "kotlin-android"
    id "dev.flutter.flutter-gradle-plugin"
}

И, наконец, внутри dependencies{} из android/app/build.gradle я также заменил $kotlin_version на 1.7.20

Итак, теперь файл android/app/build.gradle выглядит так:

plugins {
    id "com.android.application"
    id "kotlin-android"
    id "dev.flutter.flutter-gradle-plugin"
}

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
    localProperties.load(reader)
}
}


def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}


android {
    compileSdkVersion flutter.compileSdkVersion

sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}

lintOptions {
    disable 'InvalidPackage'
}

defaultConfig {
    // TODO: Specify your own unique Application ID 
    (https://developer.android.com/studio/build/application-id.html).
    applicationId "com.fahad.app"
    minSdkVersion 21
    targetSdkVersion flutter.targetSdkVersion
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
}

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 '../..'
}

// See the updated portion of the answer if you're using a more recent version of Flutter and Dart.

dependencies {
    // Eliminate this line (or the entire dependencies block)
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20"
}

Итак, я только что отредактировал 3 файла [android/settings.gradle], [android/build.gradle] и [android/app/build.gradle], и проблема решена. Надеюсь это поможет.

Обновлено

Необходимо внести еще одну небольшую корректировку. Вам необходимо удалить зависимость "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" от android/app/build.gradle после обновления до Flutter 3.22 и Dart 3.4. Пожалуйста, обратитесь к этому разделу руководства по миграции. Дополнительно обратите внимание на эту строку.

Спасибо, это работает. Требуется еще одно небольшое изменение. После обновлений Flutter 3.22 и Dart 3.4 необходимо удалить зависимость "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version". См. руководство по миграции: см. здесь

Tabassam Ali 25.05.2024 07:50

@Абдулла Аль Фахад Хорошо, можете ли вы объяснить, почему используются agpVersion 7.2.0 и kotlinVersion 1.7.20? В моем проекте остается Kotlin 1.7.21, что такое agpVersion для этого?

user_odoo 30.05.2024 08:58

@user_odoo Не обязательно писать именно ту версию, которую пишу я; вместо этого используйте самые последние версии Kotlin и Agp.

Abdullah Al Fahad 03.06.2024 06:30

золото.золото.золото.

khoi 01.07.2024 05:10

Столкнувшись с этой проблемой неделю назад после обновления версии флаттера, попробовал описанные выше методы, но это привело меня к бесконечному циклу проблем, я восстановил все, как было раньше.

под этим я имею в виду setting.gradle и build.gradle в Android и тот, что в приложении

Затем я обновил свой setting.gradle до этого и исправил проблему, не редактируя больше ничего!

pluginManagement {
    def flutterSdkPath = {
        def properties = new Properties()
        file("local.properties").withInputStream { properties.load(it) }
        def flutterSdkPath = properties.getProperty("flutter.sdk")
        assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
        return flutterSdkPath
    }
    settings.ext.flutterSdkPath = flutterSdkPath()

    includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")

    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "7.3.0" apply false
    id "org.jetbrains.kotlin.android" version "1.7.10" apply false
}

include ":app"

Первый простой способ обновить его — удалить каталог Android вашего проекта флаттера и запустить следующую команду в репозитории флаттера.

flutter create .

Но перед этим обратите внимание, что он создаст весь каталог Android с нуля, и вы потеряете настройки, например, добавили ли вы разрешения, значки запуска или выполнили какую-то работу на собственной стороне и т. д., поэтому будьте в безопасности, инициализируйте git-репо и зафиксируйте код. перед его удалением и сравните каталог Android после выполнения следующей команды

если вы создали репозиторий git, восстановите все предыдущие файлы, кроме уровня проекта и приложения. build.gradle и settings.gradle

Другой способ — выполнить шаги, приведенные в официальной документации здесь, что впервые меня немного смутило. будьте осторожны, следуя руководству, иначе у вас могут возникнуть проблемы.

учтите, у вас будет новая папка Android, и вам придется все перезагрузить

Seishin Okigaru 20.05.2024 14:32

я уже упоминал эту проблему в ответе. если внимательно читать.

Munsif Ali 20.05.2024 15:52

Если вы создали свой проект с использованием старой версии Flutter, вам необходимо выполнить миграцию. Для этого сначала проделайте все действия пошагово. (Конечно, вы можете полностью удалить файл проекта Android и запустить команду Flutter create .) https://docs.flutter.dev/release/breaking-changes/flutter-gradle-plugin-apply Если ваша проблема не решена, воспользуйтесь flutter doctor инструкцией и выполните все ее шаги. Если ваша проблема по-прежнему не решена, проблема связана с используемой вами версией Kotlin, которая находится в файле android/setting.gradle (а наиболее используемая версия отображается в ошибке VS Code в консоли отладки). Замените ее текущей версией.

Не забудьте поставить Flutter Run после выполнения шагов!

Следуя руководству по миграции https://docs.flutter.dev/release/breaking-changes/flutter-gradle-plugin-apply Будьте очень осторожны с этим абзацем, в котором вас просят проверить версии обоих " Kotlin» и версия «AGP»:

Сначала найдите значения плагина Android Gradle (AGP) и Kotlin, которые в настоящее время используются в проекте. Если они не были перемещены, они, скорее всего, определены в блоке buildscript файла /android/build.gradle. В качестве примера рассмотрим файл build.gradle из нового приложения Flutter, созданного до этого изменения:

Версия AGP — это число, которое идет в конце пути к классам строки «com.android.tools.build:gradle:7.3.0», то есть в данном случае 7.3.0. Аналогично, версия Kotlin указана в конце строки ext.kotlin_version = '1.7.10', в данном случае 1.7.10.

исходя из этого, вам нужно изменить заполнители на текущие версии, которые у вас есть, и вам нужно быть осторожными, поскольку я добавлял разные версии или более ранние версии, но это выдавало ошибки.

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "{agpVersion}" apply false
    id "org.jetbrains.kotlin.android" version "{kotlinVersion}" apply false
}

поэтому вам нужно изменить {agpVersion} и {kotlinVersion} на текущие версии вашего проекта.

И обязательно запустите его в студии Android. У меня он не работал на VS Code.

Обновляю: Flutter версия 3.22.1

1. android/build.gradle Всё, что должно быть в файле:

allprojects{
    repositories{
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'

subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}

subprojects {
    project.evaluationDependsOn(':app')
}

tasks.register("clean", Delete) {
    delete rootProject.buildDir
}

2. android/settings.gradle Всё, что должно быть в файле:

pluginManagement {
    def flutterSdkPath = {
        def properties = new Properties()
        file("local.properties").withInputStream { properties.load(it) }
        def flutterSdkPath = properties.getProperty("flutter.sdk")
        assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
        return flutterSdkPath
    }()

    includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")

    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "7.2.0" apply false
    id "org.jetbrains.kotlin.android" version "1.9.0" apply false
}

include ":app"

3. app/build.gradle Изменения в файле:

Должно быть в самом верху файла:

plugins {
    id "com.android.application"
    id "kotlin-android"
    id "dev.flutter.flutter-gradle-plugin"
}

Подобный код необходимо удалить:

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 plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'

и укажите версию:

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20"
}

Просто проверьте версию флаттера!

Это могло быть просто на моей машине, но у меня возникла проблема ' Я изменил все на ", и все заработало, конечно, после того, как я выполнил шаги, описанные в предоставленной документации.

Прежде чем вносить изменения, найдите версию Gradle (AGP) и Kotlin в проекте.

В этом файле android/build.gradle вы можете увидеть версии (AGP) и Kotlin. Запишите куда-нибудь версии, чтобы потом можно было использовать их для развертывания.

buildscript {
    ext.kotlin_version = '1.8.0'//kotlin version

    repositories {
        google()
        mavenCentral()
    }



    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.2'//gradle Or AGP version 
        //noinspection DifferentKotlinGradleVersion
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"


    }
}

Более подробная информация по ссылке ниже вам поможет. https://docs.flutter.dev/release/breaking-changes/flutter-gradle-plugin-apply

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