Avatar ·

Ошибка Gradle: устаревшие функции несовместимы с Gradle 5.0 при сборке Android

Привет! Я новичок в Kotlin и Android-разработке. Неделю назад начал изучать Kotlin и Android Studio, пытаюсь написать свой первый проект с юнит-тестами на JUnit5. Вот мой `build.gradle.kts` (модуль app): ```kotlin plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.kapt") } android { compileSdk = 33 defaultConfig { applicationId = "com.example.myapp" minSdk = 24 targetSdk = 33 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } } dependencies { implementation("androidx.core:core-ktx:1.9.0") implementation("androidx.appcompat:appcompat:1.6.1") testImplementation("org.junit.jupiter:junit-jupiter:5.9.2") } tasks.test { useJUnitPlatform() } ``` Когда я запускаю сборку через `./gradlew test` в терминале, получаю ошибку: ``` Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0. ``` Я использую Gradle 7.4.1 (проверял в `gradle-wrapper.properties`). Почему пишет про несовместимость с Gradle 5.0? Как это исправить? Пробовал чистить кэш, обновлять плагины — не помогает. В чём может быть проблема? Заранее спасибо! <<>>

Причина ошибки

Ошибка "Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0" возникает не из-за версии Gradle в вашем проекте, а из-за того, что один из плагинов или зависимостей использует устаревший API, который будет удалён в Gradle 5.0. Это предупреждение о будущей несовместимости, даже если вы используете более новую версию Gradle (7.x).

В вашем случае проблема, скорее всего, связана с плагином kotlin-kapt (или другим плагином), который в некоторых версиях использует устаревшие методы Gradle. Также это может быть вызвано конфликтом версий плагинов Android Gradle Plugin (AGP) и Kotlin.

Решение

Вот пошаговый план исправления:

  1. Обновите все плагины до последних стабильных версий
  2. Замените kapt на ksp (если возможно)
  3. Добавьте флаг для игнорирования предупреждения (временное решение)

Шаг 1: Обновите версии в корневом build.gradle.kts:

plugins {
    id("com.android.application") version "8.1.0" apply false
    id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}

Шаг 2: В модуле app замените kapt на ksp (если вы используете kapt только для обработки аннотаций):

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("com.google.devtools.ksp") version "1.9.0-1.0.13"
}

// Удалите строку: id("org.jetbrains.kotlin.kapt")

Шаг 3: Если обновление не помогло, добавьте в gradle.properties:

android.useAndroidX=true
kotlin.code.style=official
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
org.gradle.warning.mode=all

Шаг 4: Полный исправленный build.gradle.kts (модуль app):

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
}

android {
    namespace = "com.example.myapp"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
}

dependencies {
    implementation("androidx.core:core-ktx:1.12.0")
    implementation("androidx.appcompat:appcompat:1.6.1")
    testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
}

tasks.test {
    useJUnitPlatform()
}

Альтернативное решение (временный фикс)

Если срочно нужно собрать проект, добавьте в gradle.properties:

org.gradle.warning.mode=none

Это скроет предупреждения, но не решит проблему. Используйте только для отладки!

Проверка после исправлений

  • Выполните ./gradlew clean
  • Удалите папку .gradle в корне проекта
  • Запустите ./gradlew test --warning-mode all — предупреждение должно исчезнуть

Если ошибка остаётся, проверьте, не используете ли вы устаревшие плагины в других модулях (например, com.google.gms.google-services или kotlinx-serialization).

<<>>

Другой подход: диагностика через Gradle Wrapper

Иногда проблема кроется не в вашем коде, а в самом Gradle Wrapper. Попробуйте следующий метод:

  1. Проверьте версию Gradle Wrapper — откройте файл gradle/wrapper/gradle-wrapper.properties. Убедитесь, что там указана версия 7.5 или выше (например, distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip).
  2. Обновите Wrapper — выполните команду в терминале: ./gradlew wrapper --gradle-version 8.2. Это пересоздаст wrapper с новой версией Gradle.
  3. Проверьте конфликты плагинов — временно закомментируйте все плагины в build.gradle.kts (кроме com.android.application и kotlin.android) и запустите сборку. Если ошибка исчезнет, добавляйте плагины по одному, чтобы найти виновника.

Чаще всего проблема вызывается плагином kotlin-kapt или старыми версиями com.google.dagger.hilt.android. Если вы используете Hilt, обновите его до версии 2.48+ и замените kapt на ksp.

Также проверьте, нет ли в проекте файла build.gradle (не .kts) со старым синтаксисом — иногда он остаётся после миграции с Groovy на Kotlin DSL.