如何在 aar 库中指定依赖项?
Posted
技术标签:
【中文标题】如何在 aar 库中指定依赖项?【英文标题】:How to specify dependencies in aar library? 【发布时间】:2015-08-25 07:33:41 【问题描述】:我创建了一个 android 库(称为 MyLib),它依赖于 maven repo 上可用的其他库(如 gson、retrofit 等。 )。
MyLib
|
|-- Retrofit
|-- Gson
|-- ...
MyLib 被打包到一个aar
文件中。
目标是发布一个 aar 库,该库可以包含在 Android 应用程序(称为 MyApp)中,而无需再次指定 MyLib 使用的依赖项。
MyApp
|
|-- MyLib
| |-- Retrofit
| |-- gson
| |-- ...
这是我的 build.gradle 文件,用于 MyLib
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.google.code.gson:gson:2.3.1'
现在,如果我想构建和运行 MyApp 而没有依赖问题,我必须为 MyApp 使用以下 build.gradle(如果我没有指定 retrofit 和 gson 作为 deps,会抛出运行时异常,因为这些 deps 不可用)。
dependencies
compile('MyLib@aar')
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.google.code.gson:gson:2.3.1'
我不想在 MyApp 中指定 MyLib 中使用的依赖项,我应该如何编写 build.gradle 文件?
提前致谢
【问题讨论】:
如果MyLib是本地的,你应该使用compile project(':MyLib') 是的,MyLib 是本地的,但打包成 aar。 MyLib 和 MyApp 不在同一个项目中。这是两个不同的项目。 您可以随时参考项目之外的另一个文件夹 指一个项目是的,但是如何执行“compile projet('MyLib@aar')”? 【参考方案1】:将aar
发布到maven 存储库(本地或远程)并使用compile (...@aar)
包含它时,传递依赖项被关闭。
为aar
库启用传递依赖项:
compile ('com.mylib:mylib:1.0.0@aar')
transitive=true
您可以在此处阅读更多相关信息:
Can an AAR include transitive dependencies?
这适用于发布到远程或本地 maven 存储库的 aar
库,在您的情况下,听起来该库甚至不会发布到本地 maven 存储库。我找不到任何关于它是否适用于你的情况的确切信息,但你应该试一试。
【讨论】:
我现在可以在构建 aar 库以发布到本地 repo 时生成包含 deps 的 pom-default.xml 文件(使用 maven 和 maven-publish gradle 插件)。但是这个 pom 文件不包含在 aar 存档中(它只在 build 文件夹中可见,但不包含在最终存档中)。如何将其嵌入到 aar 存档中? @BrentM,如果 aar 文件存在于 Android 应用程序的 libs 目录中,可能与问题中提到的相同: compile(name:'library_name', ext:'aar') 我明白您没有找到此用例的任何确定信息。但是,您对此有任何更新吗?谢谢!以上是关于如何在 aar 库中指定依赖项?的主要内容,如果未能解决你的问题,请参考以下文章
在 pypi python setup.py 中指定可选依赖项
如何发布带有远程依赖项 (gradle) 的 Android 库 (aar)?