如果您有一个包含JAR文件和AAR文件作为依赖关系的项目(请参阅下面的注释),那么您可以将Android特定的JAR作为依赖于Android API中的类的依赖项,尽管JAR文件无法包含您已知的Android资源。仅仅因为它依赖于Android类并不意味着它需要被打包为AAR。
在这里我正在谈论什么可能是一个单模块项目,其中包括一些JAR和AAR依赖项。一个JAR文件只是一个类文件(也许非Android资源和其他文件)的集合,并且没有依赖关系,所以没有什么可以打破的。当开始构建时,构建器会将所有东西捆绑在一起并打包,而不检查JAR是否对其他类具有无法解析的依赖关系 - 您将在运行时发现类加载器异常。
如果您在IDE中的多模块项目中讨论库模块,那么这是另一回事。如果您有一个模块A可以编译为纯JAR(它在构建文件中使用apply plugin: 'java'
语句),那么它不依赖于编译为AAR的Android模块(apply plugin: 'android-library'
)。这可能永远不会被修复,或者至少不会在可预见的未来:这是因为Android模块有一个更复杂的源文件夹概念,并且Gradle中的Java插件无法理解Android的源代码集。
反之亦然 - Android模块可以依赖普通的Java模块。
注
由于局限在摇篮建设者尚未解决,您不能访问本地奥尔斯在你在你的构建文件的JAR同样的方式(通过经compile files(...)
语句引用它们);你必须欺骗Gradle认为他们在某种Maven仓库中(也许把它们放在一个实际的 Maven仓库中,它可以是本地的)。如果需要,请参阅Adding local .aar files to my gradle build以获得解决方法。
JAR如何“依赖”任何东西?它只是一个类的容器。 –
嗯是的,也许我应该措词它 - “可以打包成JAR的Android库项目是否依赖于另一个使用资源的Android库项目(因此打包为AAR)并仍然打包为JAR?“我怀疑答案是否定的,但我只想确认。 – Matthew