146

我一直在阅读一些关于 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?

4

5 回答 5

240

AARJar文件与s 比与s更相似,Dll原因如下:

Dlls 可以跨应用程序共享,其中AARs 和 jars 与您的应用程序一起打包。

AAR小号与小号Jar

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

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

注意:
使用 s 进行了类似的尝试,apk-lib但它们现在已经过时,因为AARs 更好。

于 2014-05-28T16:00:29.157 回答
16

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

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

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

所以关于Android档案库(aar)与标准jar的问题。答案取决于您使用的是什么构建工具。

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

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

于 2017-02-18T19:38:19.233 回答
7

问题中的引用与当前的现实毫无共同之处。当然,可以在 Android 中使用外部库,并且有很多库可用。也许他们想说每个应用程序必须捆绑它需要的所有库,但是在构建时重用库(静态链接)确实不是问题。

.aar不同于.jar不超过.jar不同于.zip。它对那里应该期待哪种内容有一定的概念,但两者都包含.jar并且.aar通常包含已编译的类和它们的资源。.aar只是指定该库是 Android 特定的并且具有一些预期的结构,对于此类库来说是合理的(嗯,.jar也有一些预期的结构)。

.aar 仅受 Android Studio 支持的观点也已被弃用。这样的库可以部署到 Maven Central,像 gradle 这样的工具可以使用 @aar 后缀来引用它们,例如:

dependencies {
    compile ('io.github.andviane:uncover:2.0.1@aar')
    ..
}  

引用Maven 中央部署。

于 2017-06-25T09:13:03.657 回答
5

JAR 与 AAR

JAR– Java 存档。包含.class,java资源

AAR- 安卓存档。包含classes.jar,以及其他 Android 相关文件,如 AndroidManifest.xml、R.txt、proguard.txt、res 文件夹(布局、值、可绘制)等。

Android 适用于文件jaraar. 作为库开发人员,通常aar用于共享 Android 资源,否则 -jar像更轻量级和更常见的分发工件的方式。

由于aar包含jar您可以使用它[关于]

区别:

于 2021-01-19T10:28:46.893 回答
-2

主要区别是 aar 在 android 内部被拆分为 jar。

如果您的应用仅在 android studio 中的用户应用中使用,则首选 aar。

如果您计划让应用程序与 c/c++ 编译的 lib.so 文件进行通信,则首选 jar。

根据需求使用 jar 和 aar,aar 工作简单,jar 更灵活。

这是我对 android 5 棒棒糖的了解。新版本我不知道。

于 2020-09-22T18:49:31.960 回答