Встречали «No signature of method: build_*.android()»? Вы не одиноки
Если вы когда-нибудь открывали Android Studio, вносили изменения в файл build.gradle.kts и получали в ответ загадочную красную ошибку ERROR: No signature of method: build_ap86oam3dut3pxce3x49rdtma.android() — добро пожаловать в клуб. Эта проблема с Gradle — одна из самых популярных на Stack Overflow (тысячи просмотров!), и она способна выбить из колеи даже опытного разработчика.
Хорошая новость: ошибка почти всегда имеет одну и ту же причину и исправляется за пару минут. В этой статье мы разберем её на примере Kotlin DSL (то есть build.gradle.kts), покажем, почему она возникает, и дадим пошаговый план лечения. Поехали!
Что значит эта ошибка на самом деле?
Gradle — это система сборки, которая читает скрипты build.gradle (Groovy) или build.gradle.kts (Kotlin). Когда вы видите No signature of method: build_*.android(), это означает, что Gradle не может найти функцию android { ... } в контексте корневого проекта.
Проще говоря: вы пытаетесь настроить Android-специфичные параметры (compileSdk, buildTypes, defaultConfig) в скрипте, который не является модулем приложения или библиотеки. Обычно это происходит в корневом build.gradle.kts, где должны быть только настройки для всех проектов (плагины, репозитории), а не конфигурация Android.
Типичная ситуация (пример на Kotlin DSL)
Представьте, что вы открываете корневой файл build.gradle.kts и пишете что-то вроде:
// ❌ Ошибочный код в корневом build.gradle.kts
android {
compileSdk = 34
defaultConfig {
minSdk = 24
}
}
После синхронизации Gradle вылетает та самая ошибка. Почему? Потому что корневой скрипт не знает про Android — он отвечает за общую конфигурацию, а не за конкретный модуль.
Пошаговое исправление ошибки
Давайте разберёмся, как правильно структурировать файлы сборки в проекте на Kotlin. Всего два шага.
Шаг 1: Проверьте, какой файл вы редактируете
Откройте панель Project в Android Studio (обычно слева). Найдите два файла:
build.gradle.kts(корневой, находится в корне проекта)app/build.gradle.kts(файл модуляapp)
Ошибка возникает, если вы случайно поместили блок android { ... } в корневой файл. Убедитесь, что вы работаете с app/build.gradle.kts.
Шаг 2: Перенесите код в правильный файл (если нужно)
Если вы обнаружили блок android в корневом build.gradle.kts — вырежьте его и вставьте в app/build.gradle.kts. Вот как должен выглядеть правильный вариант для модуля app:
// ✅ Правильный app/build.gradle.kts
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"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
// ... остальные зависимости
}
А корневой build.gradle.kts должен выглядеть лаконично:
// ✅ Правильный корневой build.gradle.kts
plugins {
id("com.android.application") version "8.2.0" apply false
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}
Другие частые причины ошибки
Иногда проблема не в том, что вы перепутали файлы, а в более тонких деталях. Рассмотрим ещё два сценария.
Сценарий А: Вы используете старый плагин Android
Если вы обновили Android Studio, но Gradle Plugin остался старым (например, версии 3.x), синтаксис android { ... } может не распознаваться. Решение — обновить плагин в корневом build.gradle.kts:
plugins {
id("com.android.application") version "8.2.0" apply false
}
После этого выполните File → Sync Project with Gradle Files.
Сценарий Б: Оператор apply false в корневом файле
Иногда новички забывают добавить apply false в корневом файле. Это приводит к тому, что плагин пытается примениться на уровне корня, а не модуля. Правильная запись:
// Корневой файл — только объявление, без apply
id("com.android.application") version "8.2.0" apply false
Как избежать ошибки в будущем: чек-лист
Чтобы больше никогда не видеть No signature of method: android(), запомните простое правило:
- Корневой build.gradle.kts — только
pluginsсapply falseиallprojects(если нужно). Никаких блоковandroid,dependenciesдля модулей. - Модульный build.gradle.kts (app, library) — здесь живёт
android { ... },dependencies { ... }и все настройки сборки. - Если вы используете Kotlin DSL, убедитесь, что синтаксис соответствует версии Gradle (например,
isMinifyEnabledвместоminifyEnabled).
Что делать, если ошибка всё ещё появляется?
Бывает, что вы всё проверили, а ошибка не уходит. Вот пара экстренных мер:
- Очистите кеш Gradle:
Build → Clean Project, затемBuild → Rebuild Project. - Invalidate Caches:
File → Invalidate Caches and Restart. - Проверьте версию Gradle: