Gradle:如何将Java项目风味依赖资源包含到Android APK中?

时间:2013-12-17 19:01:07

标签: java android resources dependencies gradle

我有一些仅使用build.gradle的resouces-Java项目:

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'eclipse'

和目录结构:

flavor1/
  src/
    main/
      resources/
        assets/
          file1.png
flavor2/
  src/
    main/
      resources/
        assets/
          file1.png

和另一个带有build.gradle的项目(这次是Android):

android {
  compileSdkVersion 19
  buildToolsVersion "19"

  defaultConfig {
    minSdkVersion 9
    targetSdkVersion 19
  }

  productFlavors {
    flavor1 {
      packageName "com.mydomain.flavor1"
    }

    flavor2 {
      packageName "com.mydomain.flavor2"
    }
  }

  sourceSets {
    main {
      manifest.srcFile 'AndroidManifest.xml'
      res.srcDirs = ['res']
      assets.srcDirs = ['assets']
      java.srcDirs = ['src/main/java']
    }
    flavor1 {
      res.srcDirs = ['res-flavor1']
      assets.srcDirs = ['assets-flavor1']
    }
    flavor2 {
      res.srcDirs = ['res-flavor1']
      assets.srcDirs = ['assets-flavor2']
    }
  }
}

dependencies {
  flavor1Compile project(':flavor1')
  flavor2Compile project(':flavor2')
}

目录结构:

android_project/
  assets/
  assets-flavor1/
  assets-flavor2/
  res/
  res-flavor1/
  res-flavor2/
  src/
    main/
      java/
        com/
          ...

问题是来自普通Java项目的资源:flavor1和:flavor2未包含在结果APK中。如果我将它们包含为全局依赖项:

dependencies {
  compile project(:flavor1)
}

它们包含在APK中。

这些普通Java项目的原因是它们是Android项目风格和其他项目(iOS,HTML,Java,问题中没有描述)的资源,所以我不能将它们直接包含在Android项目资产中

你能帮帮我吗?

2 个答案:

答案 0 :(得分:2)

您可以显式添加Java项目资源文件夹的路径吗?

flavor1 {
  res.srcDirs = ['res-flavor1']
  assets.srcDirs = ['assets-flavor1', '$java-project-root/flavor1/src/main/resources/assets']
}

这不太理想,但应该有效。

答案 1 :(得分:1)

每个flavor都会创建一个关联的依赖项配置对象,因此您可以执行以下操作:

dependencies {
    flavor1Compile project(':flavor1')
    flavor2Compile project(':flavor2')
}

这会将正确的资产打包成正确的变体。