繁体   English   中英

Android库JAR可以依赖Android库AAR吗?

[英]Can an Android library JAR depend on an Android library AAR?

我有一个Android库项目FooLib FooLib引用了像Android Context的东西,但是不需要任何资源文件( res/东西)所以我现在将它打包为JAR供我的应用程序使用。

我现在想让FooLib依赖于BarLib ,但BarLib 确实使用了资源,因此我无法将BarLib为JAR。 相反,它被打包为AAR。 我是否有可能让FooLib依赖BarLib但继续将FooLib为JAR? 或者,在FooLib中具有AAR依赖性FooLib迫使我将其作为AAR?

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

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

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

depend on plain Java modules. 反过来也是如此--Android模块依赖普通的Java模块。

注意

由于Gradle构建器中尚未解决的限制,您无法以与构建文件中的JAR相同的方式访问本地AAR(通过compile files(...)语句引用它们); Maven repository, which can be local). 你必须欺骗Gradle认为他们在某种Maven存储库中(可能将它们放在一个 Maven存储库中,它可以是本地存储库)。 如果需要,请参阅将本地.aar文件添加到我的gradle构建中以获得解决方法。

因为AAR格式不直接包含类作为jar文件,所以对于非Android项目没有用。 因此,最好将FooLib作为AAR。

另一种解决方案是从BarLib中提取jar库并依赖它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM