Android Archive Library (aar) vs standard jar

2022-08-31 07:46:11

我一直在阅读一些关于新采用Gradle作为Android应用程序的标准构建系统的文章。好吧,来自标准的Java开发,我通常依靠jar文件来构建我的项目。然而,Android似乎也有aar软件包,这些软件包相当于Windows操作系统中的dll文件,如下所述:

首先,您必须意识到Android平台不允许应用程序级“共享库”。在“传统”编程语言平台中,C、C++、Java,你的名字,我们都有这种共享运行时库的机制。(例如,Windows上的DLL,Unix上的DSO,JVM上的Jar等)。但是,在Android上,除非您是Google或手机制造商,否则您无法执行此操作(请参阅下面的脚注1)。作为应用程序开发人员,这可能是一个根本性的限制。在构建时和运行时“共享”或“重用”代码是软件工程实践中非常重要的一部分。由于上述限制,这在Android上相当困难(不是不可能,只是更难)。

但是,我对这个概念有一些疑问。我的意思是,开发人员什么时候应该有兴趣在其应用程序中包含aar依赖项?此依赖项是否已收紧到某些 SDK 最低版本?

例如,在一个项目中,我访问一个 COM 端口,我使用 NDK 预编译的 .so 库。如果我想共享此实用程序,是否必须创建 aar?


答案 1

AAR文件与 s 比 s 更相似,原因如下:JarDll

Dlls 可以在应用程序之间共享,其中 s 和 jar 与应用程序一起打包。AAR

AARs vs s:Jar

a 和 a 之间的主要区别在于 s 包括诸如 etc 之类的资源。这使得创建自包含的视觉组件变得更加容易。例如,如果您有多个应用程序使用相同的登录屏幕,您可以使用 s 共享类,但不能共享布局、样式等,您仍然需要复制它们。有了s,一切都捆绑在一个整洁的包装中。JarAARAARlayouts, drawablesJarAAR

总之,s是朝着正确方向迈出的一大步。AAR

注意:
对s进行了类似的尝试,但它们现在已经过时了,因为s要好得多。apk-libAAR


答案 2

Jar 和 AAR 之间的主要区别在于 AAR 包含布局、可绘制对象等资源”这一说法与 JAR 文件规范不符,因此不是事实。根据 JAR 文件规范

JAR文件是一种基于流行的ZIP文件格式的文件格式,用于将许多文件聚合成一个。JAR 文件实质上是一个包含可选 META-INF 目录的 zip 文件。

如您所见,没有内容限制禁止在JAR文件中包括布局,可绘制对象等资源。有关更多详细信息,请参阅 Java® 虚拟机规范的文章 5.3 “创建和加载”。

因此,关于Android Archive Library(aar)与标准jar的问题。答案取决于您使用的构建工具。

如果您使用Android Studio作为构建工具(分别作为项目组织者),那么您最好使用*.aar文件在Android项目之间共享封装的资源。AAR文件格式是Android Studio构建的一部分,正如它在这里的其他评论中所评论的那样,它的用户界面支持Android库的aar格式。

但除了Android Studio之外,世界其他地方都不知道那个东西是什么aar文件(工件)。例如,如果您的Android构建基于Maven,则资源共享的首选文件将是jar,因为这是本机Maven java项目工件,并且在标准jar文件中放置的内容没有限制。此外,还有一种方法可以解释Maven的任何文件格式,通过使用新组件的生命周期增强来包括aar。此处提供了一个简单的示例 如何为 Maven 创建新的包装类型?


推荐