在Android gradle build中强制执行库的优先级

时间:2015-11-06 00:17:43

标签: android android-gradle operator-precedence

我在一个框架上工作,该框架作为一组.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必须始终在构建中排在最后?

1 个答案:

答案 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文件时。在依赖是另一个项目或模块的情况下,正常(非反转)订单生效。