Как соответствовать типу сборки зависимости проекта Android Gradle?

У меня есть проект с 2 модулями: library а также app,

library Модуль, конечно, библиотека и имеет только release а также debug типы сборки.

app Модуль имеет 4 вкуса, а также release а также debug типы сборки, что дает 8 вариантов сборки. Он также объявляет зависимость от library модуль вроде так:

compile project(path:':library', configuration:'release')

Я хотел бы иметь возможность установить library Конфигурация на основе варианта сборки приложения: release варианты сборки должны использовать release версия библиотеки и debug варианты сборки должны использовать debug версия библиотеки.

Очевидный ответ - перечислить каждый из 8 вариантов и указать правильную конфигурацию, и она будет работать, но это не оптимальный ответ: это уродливо и слишком сильно загромождает скрипт сборки.

Я попытался несколько подходов с project.configurations.all{} а также applicationVariants.all{} но я не смог найти точный способ установить конфигурацию зависимостей.

Есть ли более чистый способ сделать это?

1 ответ

В случае, если кто-то еще столкнется с этой (или подобной) проблемой в настоящее время, вы хотели бы использоватьmatchingFallbacksчтобы указать, к какому разрешенному типу сборки или варианту следует вернуться, если библиотека, от которой вы зависите, не имеет соответствующих конфигураций.

https://developer.android.com/studio/build/build-variants#resolve_matching_errors

Хотя по умолчанию должно бытьdebugиreleaseprofile, поэтому, чтобы исправить вопрос OP, вам просто нужно удалить явный параметр конфигурации в объявлении зависимости:

      // forces release configuration on library
compile project(path:':library', configuration:'release')

// Allows gradle to match buildType from library to 
// what the current module's buildType is:
compile project(path:':library')

Фрагменты с сайта разработчиков на случай переноса в будущее (.kts):

      // In the app's build.gradle file.
android {
    defaultConfig {
        // Do not configure matchingFallbacks in the defaultConfig block.
        // Instead, you must specify fallbacks for a given product flavor in the
        // productFlavors block, as shown below.
    }
    buildTypes {
        getByName("debug") {}
        getByName("release") {}
        create("staging") {
            // Specifies a sorted list of fallback build types that the
            // plugin should try to use when a dependency does not include a
            // "staging" build type. You may specify as many fallbacks as you
            // like, and the plugin selects the first build type that's
            // available in the dependency.
            matchingFallbacks += listOf("debug", "qa", "release")
        }
    }
    flavorDimensions += "tier"
    productFlavors {
        create("paid") {
            dimension = "tier"
            // Because the dependency already includes a "paid" flavor in its
            // "tier" dimension, you don't need to provide a list of fallbacks
            // for the "paid" flavor.
        }
        create("free") {
            dimension = "tier"
            // Specifies a sorted list of fallback flavors that the plugin
            // should try to use when a dependency's matching dimension does
            // not include a "free" flavor. You may specify as many
            // fallbacks as you like, and the plugin selects the first flavor
            // that's available in the dependency's "tier" dimension.
            matchingFallbacks += listOf("demo", "trial")
        }
    }
}
Другие вопросы по тегам