Вопрос или проблема
У меня проблема с компиляцией моего приложения, я в основном попытался обновить версию Kotlin и Gradle до последней версии, которую смог найти. Я пытался удалить опцию “proguard” из конфигурации “release” в файле app/build.gradle, но ошибка все еще возникает.
build.gradle (android)
buildscript {
ext.kotlin_version = '2.0.21'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.6.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
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 (app)
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 не найден. Укажите местоположение с помощью flutter.sdk в файле local.properties.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode="1"
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName="1.0"
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 34
ndkVersion "26.1.10909125"
namespace = "com.example.sacemapk2"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget="1.8"
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Укажите ваш уникальный идентификатор приложения (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.sacemapk2"
// Вы можете обновить следующие значения в соответствии с потребностями вашего приложения.
// Для получения дополнительной информации смотрите: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion flutter.minSdkVersion
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildTypes {
release {
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip
Вот код ошибки, который я получаю:
Script 'C:\Bilmark\Flutter\Old\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 920
* Что пошло не так:
Произошла проблема при оценке корневого проекта 'android'.
> Произошла проблема при настройке проекта ':app'.
> Не удалось создать задачу ':app:packLibsflutterBuildRelease'.
> Нет сигнатуры метода: org.gradle.api.tasks.bundling.Jar.destinationDir() применимо для типов аргументов: (File) значения: [C:\Users\userdummy\Desktop\Work\Presentation Server\sacemapk2\build\app\intermediates\flutter\release]
Как я могу решить эту проблему? Есть ли какие-либо известные решения?
Ответ или решение
Вам было задано сообщение об ошибке при компиляции вашего приложения на Android с использованием Gradle и Kotlin. Ошибка: No signature of method: org.gradle.api.tasks.bundling.Jar.destinationDir() is applicable for argument types указывает на то, что Gradle не может найти соответствующий метод для установки директории назначения для задачи упаковывания Jar (Java Archive). Это означает, что изменения, которые вы внесли в зависимости и конфигурацию проекта, могли использовать устаревший или несовместимый метод.
Возможные источники проблемы
-
Несоответствие версий Gradle и плагинов: Убедитесь, что версии используемых плагинов и самой системы Gradle совместимы друг с другом. Вы используете Gradle версии 8.10.2 и плагин Android 8.6.1. Тем не менее, плагин Flutter (который подключается через строку
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
) может влиять на вашу сборку, особенно если он не обновлен или несовместим с новыми изменениями. -
Проблемы с конфигурацией Flutter: Путь к SDK Flutter, который вы указываете в
local.properties
, также может иметь значение. Убедитесь, что у вас установлена последняя стабильная версия Flutter и чтоflutter.gradle
соответствует вашей версии SDK. -
Устаревший синтаксис: Метод
destinationDir()
больше не поддерживается в новых версиях Gradle. Вам нужно заменить его наdestinationDirectory
(обратите внимание на множественное число).
Рекомендации по устранению проблемы
-
Проверьте плагин Flutter: Обновите Flutter SDK до последней стабильной версии и убедитесь, что Gradle плагин для Flutter также соответствует.
-
Обновление настройки Jar: Найдите участок кода, который вызывает метод
destinationDir()
. Его можно заменить на следующий:destinationDirectory = file("путь/к/вашей/папке")
Проанализируйте файл flutter.gradle
(особенно строку 920, упомянутую в сообщении об ошибке) и внесите необходимые изменения.
-
Проверьте конфликты зависимостей: Убедитесь, что актуальные версии всех зависимостей совместимы друг с другом. Если есть посторонние библиотеки, попробуйте удалить их временно и проверьте, повлияет ли это на процесс сборки.
-
Очистка кэша: Иногда Gradle может сохранять старые кэши без обновлений конфигурации. Используйте команду:
./gradlew clean
-
Обновите Gradle Wrapper: Проверьте, актуальна ли версия Gradle Wrapper в вашем проекте. Убедитесь, что в файле
gradle-wrapper.properties
указана последняя версия, совместимая с используемым плагином Android.
Заключение
Устранение этой ошибки требует точного выявления источника конфликта. Начните с обновления SDK Flutter, последующего обновления конфигураций Gradle и установки совместимых версий плагинов и библиотек. Этот методический подход должен разрешить проблемы, с которыми вы столкнулись, и поможет вашему приложению успешно скомпилироваться.