繁体   English   中英

Android 存档库 (aar) 与标准 jar

[英]Android Archive Library (aar) vs standard jar

我一直在阅读一些关于新采用 Gradle 作为 Android 应用程序的标准构建系统的文章。 好吧,来自标准 Java 开发,我通常依赖jar文件来构建我的项目。 然而似乎安卓也有AAR包,这是等同于Windows操作系统的dll文件,提到这里

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

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

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

AAR文件更类似于Jar不是Dll ,原因如下:

Dll可以在应用程序之间共享,因为AAR和 jar 与您的应用程序打包在一起。

AAR s 与Jar s:

JarAAR之间的主要区别在于AAR包含layouts, drawables等资源。这使得创建独立的可视组件变得更加容易。 例如,如果您有多个使用相同登录屏幕的应用程序,使用Jar可以共享类,但不能共享布局、样式等,您仍然必须复制它们。 有了AAR一切都捆绑在一个整洁的包中。

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

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

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

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

如您所见,没有内容限制禁止在 JAR 文件中包含布局、可绘制等资源。 有关更多详细信息,请参阅 The Java® Virtual Machine Specification 的文章 5.3“创建和加载”。

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

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

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

问题中的引文与当前的现实没有任何共同之处。 当然,可以在 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 中央部署。

JAR 与 AAR

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

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

Android 可以处理jaraar两个文件。 作为库开发人员,通常aar用于共享 Android 资源,否则 - jar更轻量级和通用的分发aar方式。

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

区别:

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

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

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

使用 jar 和 aar 根据要求 aar 工作容易,jar 更灵活。

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

暂无
暂无

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

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