После обновления версии 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.
Необходимо перенести проект, если он был создан на более старой версии. Вот инструкция: https://docs.flutter.dev/release/breaking-changes/flutter-gradle-plugin-apply.
Эта документация полезна; Я рекомендую вам использовать его. Также создайте новый пример проекта, а затем проверьте конфигурации градиента в новом примере проекта. Вместе с документацией ошибка исчезнет.
Я использовал эту документацию для обновления приложения Flutter, более или менее как и ожидалось, но много неправильного пути. Теперь, создавая собственное приложение, использующее модуль flutter, я снова получаю предупреждение, и эта документация бесполезна и приводит к множеству ошибок, начиная с undefined flutter.sdk !
После этого я получаю следующую ошибку: [!] Ваше приложение использует неподдерживаемый проект Gradle. Чтобы решить эту проблему, создайте новый проект, запустив flutter create -t app <app-directory>, а затем переместите код dart, ресурсы и pubspec.yaml в новый проект.
Начиная с 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?
на самом деле я пока не знаю, но в последней версии флаттера эта строка должна быть пустой. потому что они переместили его в файл settings.gradle
У меня была такая же проблема, я пытался следовать этим инструкциям, но это не особо помогло, привело к другим проблемам компиляции, потому что в моем файле gradle были и другие настройки.
Проблема была в одном из трёх файлов
После попытки исправить их на основе подсказок, найденных в сети, я попытался полностью удалить их и позволить самому флаттеру создавать их с помощью команды flutter create . --project-name aRandomName. При этом создается много файлов, вы можете удалить все, кроме трех, упомянутых выше. Используя сравнение изменений git, вы можете исправить их, добавив то, чего не хватает, сделав заметки из официальной документации, указанной выше, здесь еще раз.
Обновите флаттер до последней версии
затем удалите папку Android в своем проекте
затем введите flutter create . в терминале или cmd, если вы используете Windows
и готово
Это самое простое и чистое решение. Однако имейте в виду, что вам необходимо скопировать определенные файлы, такие как build.gradle, AndroidManifest.xml и файлы ресурсов, прежде чем удалять существующую папку Android. Более того, если вы изменили имя папки проекта, как это сделал я, вы можете временно изменить его обратно перед запуском flutter create ..
Удачи в настройке многих вещей с нуля. Худшее решение, за исключением случаев, когда проект был запущен недавно.
консоль: для выходного каталога не указана опция. Создайте новый проект Flutter.
у вас будет новая папка Android, и вам придется все перезагрузить.
ПОЧЕМУ
После 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 попробуй это stackoverflow.com/a/37252114/18186375
Где информация о добавлении плагинов?
Я решил проблему, следуя инструкциям 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". См. руководство по миграции: см. здесь
@Абдулла Аль Фахад Хорошо, можете ли вы объяснить, почему используются agpVersion 7.2.0 и kotlinVersion 1.7.20? В моем проекте остается Kotlin 1.7.21, что такое agpVersion для этого?
@user_odoo Не обязательно писать именно ту версию, которую пишу я; вместо этого используйте самые последние версии Kotlin и Agp.
золото.золото.золото.
Столкнувшись с этой проблемой неделю назад после обновления версии флаттера, попробовал описанные выше методы, но это привело меня к бесконечному циклу проблем, я восстановил все, как было раньше.
под этим я имею в виду
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, и вам придется все перезагрузить
я уже упоминал эту проблему в ответе. если внимательно читать.
Если вы создали свой проект с использованием старой версии 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
Для меня эта документация бесполезна. Если применить, я получаю некоторые ошибки, приложение больше не запускается, и я не знаю, как это исправить.