Android库JAR是否依赖于Android库AAR?

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

我现在想让FooLib依赖于BarLib ,但BarLib 确实使用资源,所以我不能将BarLib为JAR。 相反,它被打包成一个AAR。 我有可能让FooLib依赖于BarLib但继续将FooLib为JAR? 或者,在FooLib中有一个AAR依赖,迫使我把它变成一个AAR呢?

Solutions Collecting From Web of "Android库JAR是否依赖于Android库AAR?"

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

在这里,我正在谈论什么可能是一个单模块项目,其中包括一些JAR和AAR依赖项。 一个JAR文件只是一个类文件(也许非Android资源和其他文件)的集合,并没有依赖关系的意义,所以没有什么可以打破的。 当开始构build时,构build器会将所有东西捆绑在一起并打包,而不检查JAR是否对其他类具有无法parsing的依赖关系 – 您将在运行时发现类加载器exception。

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

然而反过来说,Android模块可以依赖普通的Java模块。

注意

由于Gradle构build器中尚未解决的限制,您不能像构build文件中那样使用JAR来访问本地AAR(通过compile files(...)语句引用它们); 你必须欺骗Gradle,认为他们在某种Maven仓库中(也许把它们放在一个实际的 Maven仓库中,可以是本地的)。 如果需要,请参阅将本地.aar文件添加到我的gradle版本以获得解决方法。

因为AAR格式不像jar文件那样直接包含类,所以对于非Android项目来说是没有用的。 因此,将FooLib制作成AAR会更好。

另一个解决scheme是从BarLib中提取jar库并依赖它。