提问者:小点点

产品风格中的Android gradle 库资源


更新到gradle 1.12,android Studio 0.10的gradle插件。

我的项目具有以下结构:

>

  • 第三方

      < li >图形 < ul > < li >图标集 < ul > < Li > IconsetBase(Android-library) < li >图标集1 (android库) < li >图标集2 (android库)

    主项目

    • src
      • main(主项目)
      • 口味1
      • 口味2

      如何让 IconsetBase Iconset1 的 res 文件夹内容合并到 flavor1 中,将 IconsetBase Iconset2 合并到 flavor2 中?

      在升级到新gradle之前,这是因为库(IconsetBase、Iconset1和Iconset2)具有与main相同的包名

      以下是我对主要项目的 build.gradle :

      buildscript {
          repositories {
              mavenCentral()
          }
          dependencies {
              repositories {
                  mavenCentral()
              }
              classpath 'com.android.tools.build:gradle:0.10.0'
          }
      }
      
      apply plugin: 'android'
      
      repositories {
          mavenCentral()
      }
      
      android {
          useOldManifestMerger false
          compileSdkVersion 19
          buildToolsVersion "19.0.3"
      
          lintOptions {
             ...
          } 
      
      sourceSets {
          main.java.srcDirs = ['src/main/java']
          main.resources.srcDirs = ['src/main/res']
      }
      
      signingConfigs {
          ...
      }
      
      buildTypes {
          ...
      }
      
      // Common dependencies
      dependencies {
         compile project(':3rdparty:Graphics:Iconsets:IconsetBase')
      }
      
      defaultConfig {
          ...
      }
      
      productFlavors {
          flavor1         { packageName "..."}
          flavor2         { packageName "..."}
      }
      
      android.sourceSets.flavor1 {
          dependencies { compile project(':3rdparty:Graphics:Iconsets:Iconset1') }
          res { srcDir 'flavor1' }
          resources { srcDir 'flavor1' }
      }
      android.sourceSets.flavor2 {
          dependencies { compile project(':3rdparty:Graphics:Iconsets:Iconset2') }
          res { srcDir 'flavor2' }
          resources { srcDir 'flavor2' }
      }
      }
      
      dependencies {
          compile 'com.android.support:support-v4:19.1.0'
          compile 'com.android.support:appcompat-v7:19.1.0'
          compile 'com.google.android.gms:play-services:4.3.23'
      }
      

      =编辑=

      进一步解释:

      我所寻求的是动态地合并来自另一个位置的资源。

      背景:flavor1具有基本图标集,其中包含图像icon1和icon2,flavor2也有基本图标集和图标1和图标2,但每个图标集的图标不同。否则,我必须多次使用每种口味的图标1、图标2等,并且在更新/更改这些图标时,必须对现有的每种口味都进行更改(我有20多种)

      这可以通过一些没有库的自定义任务来实现吗?


  • 共1个答案

    匿名用户

    您可以按口味定义特定的依赖关系:

    productFlavors {
        flavor1 {
           ...
           dependencies {
             flavor1Compile project(':iconSet1')
           }
        }
        flavor2 {
           ...
           dependencies {
             flavor2Compile project(':iconSet2')
           }
        }
     }
    

    在你的构建中,依赖项在源代码集中,这是错误的。

    编辑

    好的,我希望我现在能更好地理解你的目标。您可以为每种风格定义多个资源目录:

    android {
        sourceSets {
            flavor1 {
                res.srcDirs = ['flavor1','../3rdparty/Graphics/Iconsets/Iconset1/res']
            }
            flavor2 {
                res.srcDirs = ['flavor2','../3rdparty/Graphics/Iconsets/Iconset2/res']
            }
        }
    
    }