android - Android 库 JAR 可以依赖于 Android 库 AAR 吗?

标签 android jar gradle android-gradle-plugin aar

我有一个 Android 库项目 FooLibFooLib 引用 Android Context 之类的东西,但不需要任何资源文件(res/ 中的东西)所以我目前将其打包为供我的应用使用的 JAR。

我现在想让 FooLib 依赖于 BarLib,但是 BarLib 确实 使用资源,所以我可以' t 将 BarLib 打包为 JAR。相反,它被打包为 AAR。我是否可以让 FooLib 依赖于 BarLib 但继续将 FooLib 打包为 JAR?或者,在 FooLib 中具有 AAR 依赖项会迫使我也将其设为 AAR 吗?

最佳答案

如果您有一个包含 JAR 文件和 AAR 文件作为依赖项的项目(请参阅下面的注释),那么您可以将特定于 Android 的 JAR 作为依赖项,这些依赖项依赖于 Android API 中的类,尽管 JAR 文件不能包含您已经知道的 Android 资源。仅仅因为它依赖于 Android 类并不意味着它需要打包为 AAR。

我在这里谈论的可能是一个包含许多 JAR 和 AAR 依赖项的单模块项目。 JAR 文件只是类文件(可能还有非 Android 资源和其他文件)的集合,没有依赖感,因此没有什么可破坏的。当需要进行构建时,构建器只是将所有内容 bundle 在一起并打包,而不检查 JAR 是否对其他类具有无法解析的依赖性——您会在运行时发现类加载器异常。

如果您在 IDE 中谈论多模块项目中的库 模块,那就另当别论了。如果你有一个可以编译成普通 JAR 的模块 A(它在构建文件中使用 apply plugin: 'java' 语句),那么它就不能依赖于 Android 模块(apply plugin: 'android-library') 编译成 AAR。这可能永远不会被修复,或者至少在可预见的 future 不会:这是因为 Android 模块具有更复杂的源文件夹概念,而 Gradle 中的 Java 插件无法理解 Android 的源集。

反之亦然——Android 模块可以依赖普通 Java 模块。

注意

由于 Gradle 构建器中尚未解决的限制,您无法像访问构建文件中的 JAR 那样访问本地 AAR(通过 compile files(...)语句);你必须愚弄 Gradle,让它认为它们在某种 Maven 存储库中(也许通过将它们放在 actual Maven 存储库中,它可以是本地的)。参见 Adding local .aar files to my gradle build如果需要,可以找到解决方法。

关于android - Android 库 JAR 可以依赖于 Android 库 AAR 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22103821/

相关文章:

android - 如何将 Jar 文件添加到 Android 的 Cordova 插件而不将其编译到 APK 中

java - OpenCV 在 Mac 上无法正常工作

android - 如何添加/删除 Artifact 以 gradle Android Studio

android - 使用 Android 编译较新版本的 FFMPEG

android - 启动第一个 Activity 的目的是什么?

java - 单击按钮时在后台通过电子邮件发送文本文件

android - android中的霜玻璃效果

java - 如何在pom.xml中使用两个版本的itext jar文件?

java - 如何缩短 Android Studio 3.0 的构建时间?

android - 更新 Gradle