Ошибка "No signature of method: build_*.android()" в Gradle при сборке Android проекта на Kotlin
Причина ошибки
Ошибка No signature of method: build_*.android() возникает из-за несовместимости между версией Kotlin DSL и Gradle. В вашем случае проблема в том, что вы используете синтаксис Kotlin DSL (файл .gradle.kts), но в блоке android {} применяете синтаксис, характерный для Groovy DSL. В Kotlin DSL все строки должны быть в двойных кавычках, а также некоторые методы имеют другую сигнатуру.
Основные признаки неправильного синтаксиса:
- Использование одинарных кавычек для строк (должны быть двойные)
- Отсутствие круглых скобок у некоторых конфигураций
- Неправильное использование
proguardFiles()— в Kotlin DSL этоsetProguardFiles()или передача списка черезlistOf()
Правильное решение
Замените содержимое вашего файла build.gradle.kts (Module: app) на следующий корректный код:
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android") version "1.9.0"
}
android {
compileSdk = 34
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
}
Ключевые отличия Kotlin DSL от Groovy DSL
- Кавычки: Все строки в Kotlin DSL должны быть в двойных кавычках (
"..."), одинарные кавычки не используются. - Метод
proguardFiles(): В Kotlin DSL аргументы передаются как параметры функции, а не как строка с пробелами. ИспользуйтеproguardFiles(file1, file2). - Лямбды: В Kotlin DSL лямбды пишутся с фигурными скобками, но без лишних скобок вокруг параметров.
- Плагины: Всегда используйте
id("...")с кавычками, даже для встроенных плагинов.
Дополнительная проверка
Убедитесь, что в корневом файле build.gradle.kts (Project level) также используется Kotlin DSL и объявлены правильные версии:
plugins {
id("com.android.application") version "8.0.2" apply false
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}
После исправления выполните File → Invalidate Caches and Restart в Android Studio, затем синхронизируйте проект заново. Ошибка должна исчезнуть.
<<Альтернативный подход: проверка версий Gradle и AGP
Иногда ошибка "No signature of method" может быть вызвана не только синтаксисом, но и несовместимостью версий Android Gradle Plugin (AGP) и Gradle. В вашем случае AGP 8.0.2 требует Gradle 8.0 или выше, но если у вас стоит более старая версия Gradle (например, 7.x), то метод android() может быть недоступен.
Проверьте файл gradle-wrapper.properties (находится в папке gradle/wrapper/). Убедитесь, что там указана версия Gradle 8.0 или выше:
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
Если версия ниже — обновите её. Также рекомендую перейти на последнюю стабильную версию AGP и Kotlin:
- AGP: 8.2.0 (совместима с Gradle 8.2+)
- Kotlin: 1.9.22
После обновления версий выполните Clean Project (Build → Clean Project) и пересоберите проект. Этот подход помогает, если синтаксис в файлах правильный, но сборка всё равно падает.