В чем разница между SourceSet и таргетом

«В чем разница между SourceSet и таргетом» — вопрос из категории Gradle и сборка, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SourceSet определяет структуру исходных файлов (код, ресурсы) для конкретной конфигурации сборки (например, main, test, debug). Он указывает, где искать файлы для компиляции.

Таргет (build variant) — это комбинация buildType (debug/release) и productFlavor (например, free/paid). Он определяет, как будет собираться приложение, включая настройки, зависимости и манифесты.

Пример:

android {
    sourceSets {
        main {
            java.srcDirs = ['src/main/java']
            res.srcDirs = ['src/main/res']
        }
        debug {
            manifest.srcFile 'src/debug/AndroidManifest.xml'
        }
    }
    productFlavors {
        free { ... }
        paid { ... }
    }
}

Здесь main и debug — SourceSets, а freeDebug или paidRelease — таргеты.