Как соответствовать типу сборки зависимости проекта 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
иrelease
profile, поэтому, чтобы исправить вопрос 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")
}
}
}