【问题标题】:Process (only) resources from library (no in dependencies) in multiproject在多项目中处理(仅)来自库(不在依赖项中)的资源
【发布时间】:2015-11-13 11:33:14
【问题描述】:

我在 Android Studio 中有一个多项目部署,其中项目是库(主项目应用除外)。

结构是这样的:

+ app
    + manifest
    + java
    + res
+ library 1
    + manifest
    + java
    + res
        + layout
        + values
        + xml
    + assets
+ library 2
    + ....

我需要配置 build.gradle 以在主应用程序的编译中包含库中的特定资源(如 xml、字符串或字体)(在我的情况下,我有不同的风格)。

我可以为每种风格包含整个项目,但没有必要将所有 java 文件包含在其他资源中,因为这种特定风格没有使用它们。但是,主应用程序仍需要使用字体和一些 strings.xml、字体或库中的 xml 图标。

在 build.gradle 的风味描述中添加什么指令以包含(仅)来自库(而不是整个库)的这些特定资源?

更新


我正在尝试通过将以下内容添加到 build.gradle 来将这些资源包含在 sourceSets 中:

sourceSets {
    main.resources.srcDirs += '/home/username/AndroidStudioProjects/Lib1/lib1/src/main/res/values'
    main.resources.srcDirs += new File("/home/username/AndroidStudioProjects/Lib1/lib1/src/main/res/values").absolutePath
    main.resources.srcDirs += new File('/home/username/AndroidStudioProjects/Lib1/lib1/src/main/res/values').absolutePath
    main.resources.srcDirs += new File(new URI("file:///home/username/AndroidStudioProjects/Lib1/lib1/src/main/res/values")).absolutePath
    main.resources.srcDirs += '../../Lib1/lib1/src/main/resources/values'
    main.resources.srcDirs += '../../Lib1/lib1/src/main/res/values'
    main.resources.srcDirs += '../../Lib1/lib1/src/main/resources/xml'
    main.resources.srcDirs += '../../Lib1/lib1/src/main/assets'
    main.resources.srcDirs += 'project(Lib1).sourceSets.main.srcDirs'
    main.resources.srcDirs += 'project(:Lib1).sourceSets.main.srcDirs'
    main.resources.srcDirs += 'project(:..:Lib1).sourceSets.main.srcDirs'
}

其中一些组合预计会起作用,但我没有看到中间或生成文件夹中的 lib 资源有任何更新。

更新:由于这个问题没有明确的答案,我在 gradle 的论坛中打开了一个错误请求。关注这里:https://discuss.gradle.org/t/sourcesets-for-paths-not-belonging-to-projects-added-as-dependencies/12720/2

【问题讨论】:

  • 你不能只从最终的 apk 中排除未使用的资源吗?
  • 我不喜欢这种方法的是它仍然会为所有风格编译所有库,这有点过头了(我有很多库)。在编译主要应用风格时,必须有一些更简洁的方法来从库中挑选特定资源
  • 哼,你不会想调用一些没用完的库吧?
  • 是的,只使用了一些资源作为字体图标和特定的字符串,这些库的一小部分不需要整个编译
  • 据我了解,除非导入项目,否则无法导入或使用其他项目资源。只有您可以从该项目中复制资源并在需要时粘贴到您的项目中。

标签: android gradle android-gradle-plugin


【解决方案1】:

最好的方法是将库附加到风味上。但是使用这种方法,您根本无法使用该库。

myflavourCompile 'com.lib:libraryname:0.0.3'

【讨论】:

  • 这个问题是我可以有 10 个库每种风格,它会过度编译,因为我也有几种风格......当我只想要一些资源时(例如字体图标和字符串)
  • 即使在附加库后给出错误资源drawable/ic_emoji_food_holo_dark not found
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
相关资源
最近更新 更多