Ошибка Gradle в Android: No signature of method: build_*.android() — как исправить?

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Встречали «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).

Что делать, если ошибка всё ещё появляется?

Бывает, что вы всё проверили, а ошибка не уходит. Вот пара экстренных мер:

  1. Очистите кеш Gradle: Build → Clean Project, затем Build → Rebuild Project.
  2. Invalidate Caches: File → Invalidate Caches and Restart.
  3. Проверьте версию Gradle:

Блоги

Рекомендаций по книгам