【问题标题】:How to import an Android library aar as a module with Android Studio Arctic Fox?如何使用 Android Studio Arctic Fox 将 Android 库 aar 作为模块导入?
【发布时间】:2021-08-04 18:47:49
【问题描述】:

我以前可以import library aar files as modules,他们一直工作得很好。我无法弄清楚如何使用最新版本的 Android Studio Arctic Fox 来做到这一点。有人可以提供一些建议吗?

我可以按照the official instructions在build.gradle中添加以下内容来添加aar作为依赖项:

implementation files('libs/myLibrary-release.aar')

不幸的是,这将需要依赖应用程序(即在其 build.gradle 中使用上述行来使用库的应用程序)知道 myLibrary 使用了哪些外部库并添加所有依赖项。例如,如果 myLibrary 有 30 个依赖项,例如“implementation 'joda-time:joda-time:2.10.5'”,则每个依赖的应用程序都必须具有这 30 个依赖项。如果 myLibrary 更新了新的依赖项,所有依赖的应用程序也需要添加它。最糟糕的是the app can build and start fine without these dependencies but will crash at runtime when a missing dependency is needed

【问题讨论】:

  • 能否联系myLibrary的发布者,询问它是否在线发布在某个Maven仓库中?
  • 出版商是我。不幸的是,它不能。

标签: android-studio android-library android-studio-arctic-fox


【解决方案1】:

我建议将 myLibrary 的所有依赖项嵌入到 myLibrary 的 AAR 文件中。

嵌入非常简单 - 下载所有myLibrary 的依赖项的所有AAR 和JAR,将它们保存在lib 文件夹中,并以以下形式添加新的本地依赖项:

implementation files('libs/some-dependency.jar')

您确实需要担心在使用您的 AAR 的应用中重复的类定义。 例如,如果您使用joda-time 库并且您的消费者也使用joda-time,则消费者的构建将失败,因为joda-time 库被编译了两次。

解决方案是通过将所有类的类路径更改为不会与您的消费者应用程序的依赖项冲突的唯一类路径来隐藏您的依赖项。

例如,org.joda.time.DateTime 类将转换为 just.a.unique.prefix.org.joda.time.DateTime

我见过影子在行动,但我缺乏这方面的经验。 但请查看以下指南以帮助您: https://imperceptiblethoughts.com/shadow/

【讨论】:

  • 为我工作,谢谢!