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

gre*_*egm 5 android build gradle android-studio android-gradle-plugin

有人可以解释下面引用的这个简短段落中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库,则不能直接将其作为本地依赖项引用.这是因为如果在dexing项目及其所有依赖项时找到相同的jar文件,android插件会抱怨.(请注意,即使您只引用一次,您现在也无法实际使用本地aar文件).

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

另一种选择是创建一个新的Gradle子项目,并使该项目的已发布工件成为您要重用的jar或aar文件.然后你可以简单地让其他Gradle子项目依赖于这个新的子项目.

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

configurations.create( "默认")

artifacts.add("default",file('somelib.jar'))

小智 0

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

如果一个库模块依赖于somelib.jar,另一个依赖于该库模块的应用程序模块也依赖于somelib.jar,那么可能会出现“多个 dex 文件定义”错误。

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