【发布时间】: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