簡體   English   中英

基於構建類型和風格的Gradle依賴性

[英]Gradle dependency based on both build type and flavor

我有幾種構建類型: debugrelease 我也有兩種口味的pubdev

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")
}

適用於Gradle 3.xx的Android插件

構建插件的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM