解释Android Build System文档中描述的传递依赖关系策略

时间:2014-09-01 14:46:11

标签: android build gradle android-studio android-gradle

有人可以解释下面引用的这个简短段落中Android工具团队的含义吗?

具体做法是: 什么是“somelib.jar”?

他们是否建议我创建一个只有依赖项的新子项目,将其命名为“projectA”,然后让项目发布“projectA.jar”? (使用artifacts.add(“default”,file('projectA.jar'))

我想要的行为是发布“projectA.jar”及其依赖项,而不会导致任何“多个dex文件定义”错误。

http://tools.android.com/tech-docs/new-build-system/tips#TOC-Handling-transitive-dependencies-for-local-artifacts-jars-and-aar-

引用:

  

如果您有更多想要使用的本地jar或aar库   比一个项目,你不能只是直接引用它作为本地   依赖。这是因为android插件会抱怨它   dexing项目及其所有内容时,两次查找相同的jar文件   依赖。 (注意,现在你实际上不能使用本地aar   文件,即使你只引用一次)。

     

解决此问题的一种方法是将工件部署在存储库中。而   这是可能的,由于开销可能不方便   管理这样的存储库。

     

另一种选择是创建一个新的Gradle子项目,并进行此项   project的已发布工件是您想要的jar或aar文件   重用。然后你可以简单地让其他Gradle子项目依赖   这个新的子项目。

     

在这个新的子项目中,只需创建一个build.gradle即可   以下内容:

     

configurations.create(“default”)

     

artifacts.add(“default”,file('somelib.jar'))

1 个答案:

答案 0 :(得分:0)

在我看来,这主要用于库模块。

如果一个库模块依赖于somelib.jar,则依赖于库模块的另一个应用程序模块也依赖于somelib.jar,然后"多个dex文件定义"可能会出现错误。

作为"提示"比如,问题可以通过创建一个简单的模块来解决,该模块无法发布*.jar*.aar仅用于依赖其他模块,只有依赖*.jar。这样,库模块的*.aar输出将不包含somelib.jar