我在一个框架上工作,该框架作为一组.aar
文件提供给客户,然后将这些文件包含在他们的项目中,如下所示:
...
+-- assets
+-- libs
+-- framework-module1.aar
+-- framework-module2.aar
+-- framework-module3.aar
+-- customer.aar
+-- main
...
该框架包含许多通用于所有客户的模块,以及一个customer.aar
,它提供客户特定的代码和配置。我们的想法是customer.aar
中的代码/资源覆盖了每个客户需求的默认代码/资源。
问题是:在构建最终.apk
时,有时值是自定义的(按预期),但有时它们仍然是默认值。我想,.aars
正在组装的顺序不正确。
在构建工具的文档中提到了库优先级,但它们只与旧的基于Eclipse的构建系统相关,而不是基于Gradle的构建系统。
这是我的build.gradle
文件:
...
repositories {
flatDir {
dirs file('libs')
}
}
dependencies {
compile(name:'framework-module1', ext:'aar')
compile(name:'framework-module2', ext:'aar')
compile(name:'framework-module3', ext:'aar')
compile(name:'customer', ext:'aar')
}
...
有没有办法告诉Gradle customer.aar
必须始终在构建中排在最后?
答案 0 :(得分:2)
Android构建工具按照与Gradle脚本中声明的顺序相反的顺序处理资源。如果您是查询,则负责订单的代码为found here。
只绕一条线解决了问题:
dependencies {
compile(name:'customer', ext:'aar')
compile(name:'framework-module1', ext:'aar')
compile(name:'framework-module2', ext:'aar')
compile(name:'framework-module3', ext:'aar')
}
在改变依赖关系的顺序后,请记住clean
您的构建! Gradle会不自动检测到它。
请注意,此“反向”顺序仅适用于资源来自Android库,即依赖项为aar
文件时。在依赖是另一个项目或模块的情况下,正常(非反转)订单生效。