← Назад к вопросам

Что такое common таргеты?

2.0 Middle🔥 91 комментариев
#Архитектура и паттерны#Многомодульность

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Common Targets?

Common targets (или "общие таргеты") — это ключевые элементы в системе сборки Gradle, используемой для разработки Android приложений. Они представляют собой стандартные, предопределенные конфигурации сборки, которые Gradle создает автоматически для каждого модуля проекта, чтобы упростить и унифицировать процесс разработки, тестирования и распространения кода.

Основная суть и назначение

Когда вы создаете новый модуль в Android Studio (например, модуль app), Gradle генерирует для него набор common targets. Эти таргеты являются точками входа для выполнения различных задач (tasks) в процессе сборки. Их основное назначение — предоставить разработчику простой и стандартизированный способ:

  • Собрать проект для разных целей (разработка, тестирование, релиз).
  • Запустить тесты разных типов.
  • Очистить выходные директории.
  • Установить приложение на устройство или эмулятор.

Таким образом, common targets абстрагируют сложность внутренних процессов Gradle, позволяя вам использовать простые команды из CLI или IDE.

Основные виды Common Targets в Android проекте

В типичном Android модуле Gradle создает следующие основные common targets:

  1. assemble — собирает все выходные артефакты модуля (APK, AAB, библиотеки). Этот таргет является родительским для более специфичных.
  2. assembleDebug и assembleRelease — собирают APK или AAB для конкретного типа сборки (debug или release). Например, команда ./gradlew :app:assembleDebug создает debug APK.
    # Пример использования в командной строке
    ./gradlew assembleRelease
    
  3. build — выполняет полный цикл сборки: компиляция, запуск тестов, создание артефактов. Часто используется для проверки всего модуля.
  4. clean — удаляет все выходные директории и файлы предыдущих сборок (папку build/). Используется для "чистого" начала.
    // Задача clean определяется в Gradle автоматически
    // В коде она обычно не видна, но доступна для исполнения
    
  5. check — запускает все проверки, включая unit тесты. Не включает connected (инструментальные) тесты.
  6. test — запускает только unit тесты для текущего модуля. Для этого таргета должен быть настроен source-set test.
  7. connectedCheck или connectedAndroidTest — запускает instrumented тесты (AndroidTests) на подключенных устройствах/эмуляторах.
  8. installDebug и installRelease — собирают и сразу устанавливают соответствующую версию APK на подключенное устройство. Сейчас чаще используется через IDE.

Как они работают и где находятся?

Common targets не являются физическими файлами. Они динамически формируются Gradle на основе конфигурации модуля (build.gradle.kts или build.gradle), плагинов (особенно com.android.application или com.android.library) и source-sets.

  • Плагин com.android.application создает таргеты для сборки APK/AAB (assembleDebug, assembleRelease).
  • Плагин com.android.library создает таргеты для сборки AAR (assemble).
  • Плагин java-library или использование тестовых фреймворков (JUnit) создает таргеты test.

Вы можете увидеть список всех доступных задач (включая common targets) в Android Studio в разделе Gradle > ваша модуль > Tasks, или выполнив команду:

./gradlew tasks

Важность и преимущества использования

  1. Стандартизация: Независимо от размера или сложности проекта, у всех будут одинаковые базовые таргеты. Это упрошает onboarding, CI/CD конфигурацию и скрипты.
  2. Интеграция с CI/CD: Common targets являются основой для pipelines. Команды assembleRelease, test и connectedCheck прямо используются в Jenkins, GitHub Actions и др.
    # Пример шага в GitHub Actions
    - name: Run Unit Tests
      run: ./gradlew test
    
  3. Сокращение ручной конфигурации: Разработчику не нужно самому описывать сложные задачи сборки для каждого типа выходного файла.
  4. Прозрачность процессов: Названия таргетов (debug, release) прямо указывают на тип сборки, что делает процесс понятным.

Пример зависимости и расширения

Common targets часто служат зависимостями (dependencies) для более специфичных, кастомных задач. Например, вы можете создать свою задачу uploadToFirebase, которая будет зависеть от assembleRelease, гарантируя, что релизный APK будет собран перед загрузкой.

// Пример в build.gradle.kts
tasks.register("uploadToFirebase") {
    dependsOn("assembleRelease")
    doLast {
        // Ваш код для загрузки APK в Firebase App Distribution
        println("Uploading release APK...")
    }
}

В итоге, common targets — это фундаментальный механизм Gradle, который обеспечивает единый, предсказуемый и эффективный интерфейс для выполнения всех ключевых операций в жизненном цикле разработки Android приложения. Их понимание необходимо для грамотной работы с проектом, особенно в контексте автоматизации сборки и тестирования.