【问题标题】:Gradle: How to include Java project flavor dependency resources into Android APK?Gradle:如何将 Java 项目风味依赖资源包含到 Android APK 中?
【发布时间】:2014-01-05 16:57:05
【问题描述】:

我有一些带有 build.gradle(s) 的纯资源 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 项目资产中.

你能帮帮我吗?

【问题讨论】:

    标签: java android resources dependencies gradle


    【解决方案1】:

    你能明确添加Java项目资源文件夹的路径吗?

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

    这并不理想,但应该可以。

    【讨论】:

    • 这确实有效!虽然必须使用相对或绝对路径,所以我编辑了你的帖子。谢谢。
    • 嗯,不幸的是,这会中断对 Android Studio 和 IntelliJ 的导入并出现错误:无法注册给定的“源”类型路径,因为它超出了内容根目录。任何线索如何解决这个问题?
    • Android Studio 0.5 已修复!万岁!
    【解决方案2】:

    每种风味都会创建一个关联的依赖配置对象,因此您可以这样做:

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

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

    【讨论】:

    • 我愿意,彻底了解我的问题。这确实适用于 Java 项目,但不适用于 Android 项目。即使用了项目依赖项(源等),但资源文件不包含在生成的 APK 中。
    • 从另一个答案中,我了解到您希望它们作为资产而不是资源(从您的问题中不清楚)。对吗?
    • 是的,我认为在 Android 的情况下它们是同义词。
    • 基于风格的依赖项是否也适用于库项目?
    猜你喜欢
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    相关资源
    最近更新 更多