[英]Gradle dependency based on both build type and flavor
我有幾種構建類型: debug
, release
。 我也有兩種口味的pub
和dev
。
pub
風味的應用程序取決於pub
庫,類似於dev
風格。 現在我想debug
構建類型應用程序依賴於庫的debug
版本。 以下不起作用:
pubReleaseCompile project(path: ':common', configuration: "pubRelease")
devReleaseCompile project(path: ':common', configuration: "devRelease")
pubDebugCompile project(path: ':common', configuration: "pubDebug")
devDebugCompile project(path: ':common', configuration: "devDebug")
注意:庫已設置為編譯所有變體。
有沒有辦法根據flavor和build類型指定條件項目依賴?
編輯:為避免混淆,請遵循我當前使用的項目中的相關build.gradle
文件。
project / common / build.gradle (庫)
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.hugo' // annotation-based code generated logs only in debug build
android {
defaultPublishConfig "pubRelease"
publishNonDefault true // four variants of the library are built
buildTypes {
debug {}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
productFlavors {
pub {
// custom build config fields
}
dev {
// custom build config fields
}
}
}
dependencies {
// ...
}
project / parent / build.gradle (使用該庫的應用程序模塊之一)
apply plugin: 'com.android.application'
apply plugin: 'com.jakewharton.hugo'
android {
// ...
signingConfigs {
release {
// ...
}
}
buildTypes {
release {
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
shrinkResources true
minifyEnabled true
}
debug {
versionNameSuffix '-debug'
}
}
productFlavors {
pub {
// custom res values
}
dev {
// custom res values
}
}
}
dependencies {
// ...
pubCompile project(path: ':common', configuration: "pubRelease")
devCompile project(path: ':common', configuration: "devRelease")
}
構建插件的3.xx使用的變體感知依賴分辨率,以便devDebug
應用程序模塊的變種會自動使用devDebug
它的庫模塊依賴的變種。 要回答這個問題,這就足夠了:
implementation project(':common')
在這里閱讀更多內容: https : //developer.android.com/studio/build/dependencies.html#variant_aware
我能在這里找到解決方案: https : //github.com/JakeWharton/u2020/blob/master/build.gradle
有關原始代碼不足的原因,請訪問: https : //code.google.com/p/android/issues/detail?id = 162285
工作方案:
configurations {
pubDebugCompile
devDebugCompile
pubReleaseCompile
devReleaseCompile
}
dependencies {
pubReleaseCompile project(path: ':common', configuration: "pubRelease")
devReleaseCompile project(path: ':common', configuration: "devRelease")
pubDebugCompile project(path: ':common', configuration: "pubDebug")
devDebugCompile project(path: ':common', configuration: "devDebug")
}
首先定義各種構建類型:
buildTypes {
pubRelease {
//config
}
devRelease {
//config
}
}
創建僅針對特定buildType和flavor執行的任務:
task pubReleaseTask << {
//code
}
task devReleaseTask << {
//code
}
您可以動態添加依賴項:
tasks.whenTaskAdded { task ->
if (task.name == 'pubRelease') {
task.dependsOn pubReleaseTask
}
if (task.name == 'devRelease') {
task.dependsOn devReleaseTask
}
}
看看多味道變體您不應該使用buildTypes。 但是你可以定義多種口味:
flavorDimensions "first", "second"
productFlavors {
pub {
flavorDimension "first"
}
dev {
flavorDimension "first"
}
deb {
flavorDimension "second"
}
rel {
flavorDimension "second"
}
}
然后你可以像這樣添加你的libs依賴項
pubRelCompile project(path: ':common', configuration: "pubRel")
devRelCompile project(path: ':common', configuration: "devRel")
pubDebCompile project(path: ':common', configuration: "pubDeb")
devDebCompile project(path: ':common', configuration: "devDeb")
跟進@ dooplaye的例子,假設你只想編譯一種風格的leanback,你可以參考下面的代碼片段:
applicationVariants.all { variant ->
def flavorString = ""
def flavors = variant.productFlavors
for (int i = 0; i < flavors.size(); i++) {
flavorString += flavors[i].name;
}
if (flavorString.equalsIgnoreCase("pubdeb")) {
dependencies {
compile('com.android.support:leanback-v17:22.2.1')
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.