Android gradle库资源的产品风味

ram*_*den 4 android gradle android-gradle-plugin

更新为gradle 1.12,android studio 0.10的gradle插件.

我的项目有以下结构:

  • 的3rdParty

    • 图像
      • 图标集
        • IconsetBase(android-library)
        • Iconset1 (android-library)
        • Iconset2 (android-library)
  • MainProject

    • SRC
      • 主要 (主要项目)
      • flavor1
      • flavor2
      • ...

如何将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'
}
Run Code Online (Sandbox Code Playgroud)

= EDIT =

进一步说明:

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

背景:flavor1有基本图标设置图像icon1和icon2,flavor2也有基本iconset和icon1和icon2,但每个图标集的图标不同.否则我必须多次使用icon1,icon2等每个味道,并且这些图标的更新/更改必须对现有的每种味道都做(我有20多个)

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

ben*_*n75 7

您可以通过flavor定义特定依赖项:

productFlavors {
    flavor1 {
       ...
       dependencies {
         flavor1Compile project(':iconSet1')
       }
    }
    flavor2 {
       ...
       dependencies {
         flavor2Compile project(':iconSet2')
       }
    }
 }
Run Code Online (Sandbox Code Playgroud)

在您的构建中,依赖项位于SourceSets中,这是错误的.


编辑

好的,我希望我现在能更好地理解你的目标.您可以做的是为每个flavor定义多个资源目录:

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

}
Run Code Online (Sandbox Code Playgroud)