如何使用 Android Studio Arctic Fox 将 Android 库 aar 作为模块导入?
How to import an Android library aar as a module with Android Studio Arctic Fox?
我曾经能够 import library aar files as modules,他们一直工作得很好。我无法弄清楚如何使用 Android Studio Arctic Fox 的最新版本来做到这一点。谁能提供一些建议?
我可以按照the official instructions添加一个aar作为依赖,在build.gradle中添加以下内容:
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
的所有依赖项嵌入 myLibrary
的 AAR 文件中。
嵌入非常简单 - 下载所有 myLibrary
依赖项的所有 AAR 和 JAR,将它们保存在 lib
文件夹中并以以下形式添加新的本地依赖项:
implementation files('libs/some-dependency.jar')
您确实需要担心使用您的 AAR 的应用中的重复 class 定义。
例如,如果您使用 joda-time
库而您的消费者也使用 joda-time
,则消费者的构建将失败,因为 joda-time
库被编译了两次。
解决方案是通过将所有 classes 的 class 路径更改为不会与您的消费者应用程序的依赖项发生冲突的唯一 class 路径来隐藏您的依赖项。
例如,class org.joda.time.DateTime
将转换为 just.a.unique.prefix.org.joda.time.DateTime
。
我见过阴影效果,但我缺乏经验。
但请查看以下指南来帮助您:
https://imperceptiblethoughts.com/shadow/
我曾经能够 import library aar files as modules,他们一直工作得很好。我无法弄清楚如何使用 Android Studio Arctic Fox 的最新版本来做到这一点。谁能提供一些建议?
我可以按照the official instructions添加一个aar作为依赖,在build.gradle中添加以下内容:
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
的所有依赖项嵌入 myLibrary
的 AAR 文件中。
嵌入非常简单 - 下载所有 myLibrary
依赖项的所有 AAR 和 JAR,将它们保存在 lib
文件夹中并以以下形式添加新的本地依赖项:
implementation files('libs/some-dependency.jar')
您确实需要担心使用您的 AAR 的应用中的重复 class 定义。
例如,如果您使用 joda-time
库而您的消费者也使用 joda-time
,则消费者的构建将失败,因为 joda-time
库被编译了两次。
解决方案是通过将所有 classes 的 class 路径更改为不会与您的消费者应用程序的依赖项发生冲突的唯一 class 路径来隐藏您的依赖项。
例如,class org.joda.time.DateTime
将转换为 just.a.unique.prefix.org.joda.time.DateTime
。
我见过阴影效果,但我缺乏经验。 但请查看以下指南来帮助您: https://imperceptiblethoughts.com/shadow/