Android档案库(aar)vs标准jar
我一直在阅读一些关于Gradle作为Android应用程序的标准构build系统的文章。 那么,从标准的Java开发,我通常依靠jar文件来build立我的项目。 但是,Android似乎也有一个包,它们相当于Windows操作系统中的dll文件,如下所述:
首先,你必须认识到,Android平台不允许应用程序级的“共享库”。 在“传统”编程语言平台,C,C ++,Java中,您可以命名它,我们有这种共享运行时库的机制。 (例如,Windows上的DLL,Unix上的DSO,JVM上的Jar等)。 但是,在Android上,除非您是Google或手机制造商,否则不能这样做(请参阅下面的脚注1)。 作为应用程序开发人员,这可能是一个基本的限制。 在编译时和运行时,“共享”或“重用”代码是软件工程实践中非常重要的一部分。 由于上述限制,这在Android上是相当困难的(不是不可能,更难)。
不过,我对这个概念有些怀疑。 我的意思是,开发人员何时应该在其应用程序中包含aar依赖关系? 这种依赖关系是否收紧到SDK最低版本?
例如,在一个项目中,我访问一个COM端口,我使用NDK预编译的 .so库。 如果我想分享此实用程序,是否必须创build一个aar?
由于以下原因, AAR
文件与Jar
相比更类似于Dll
:
可以在应用程序中共享
AAR
,而AAR
和JAR包装在应用程序中。
AAR
vs Jar
s:
Jar
和AAR
之间的主要区别在于AAR
包含layouts, drawables
等资源。这使得创build自包含的可视化组件变得更容易。 例如,如果您有多个应用程序使用相同的login屏幕,但使用Jar
可以共享类而不是布局,样式等,您仍然需要复制它们。 与AAR
的一切都捆绑在一个整洁的包。
总之, AAR
是朝着正确方向迈出的一大步。
注意:
使用apk-lib
进行类似的尝试,但现在已经过时了,因为AAR
更好。
“ JAR和AAR之间的主要区别在于AAR包含布局,可绘制等资源 ”与JAR文件规范不相符,因此不是一个事实。 根据JAR文件规范 :
JAR文件是基于stream行的ZIP文件格式的文件格式,用于将多个文件合并为一个文件。 JAR文件本质上是一个包含可选META-INF目录的zip文件。
正如您所看到的,没有内容限制,禁止在JAR文件中包含布局,绘图等资源。 有关更多详细信息,请参阅Java®虚拟机规范的文章5.3“创build和加载”。
所以在问题Android档案库(AAR)VS标准的jar子。 答案取决于你使用的是什么构build工具。
如果您使用Android Studio作为构build工具(分别作为项目组织者),您最好使用* .aar文件在Android项目之间共享封装的资源。 AAR文件格式是Android Studio构build的一部分,因为它在其他评论中评论过,其用户界面支持Android库的格式。
但除了Android Studio之外,世界其他地方都不知道aar文件(神器)是什么东西。 例如,如果您的Android版本基于Maven,那么共享资源的首选文件将是jar,因为这是本机Maven java项目工件,并且没有限制在标准jar文件中放置什么。 另外,还有一种方法可以解释Maven的任何文件格式,包括使用生命周期增强的新组件。 一个简单的例子可以在这里如何为Maven创build一个新的包装types?
这个问题中的引用与当前的现实毫无共同之处。 当然,可以在Android中使用外部库,并且有很多库可用。 也许他们想说,每个应用程序必须捆绑它所需的所有库,但在构build时重用库(静态链接)实际上不是问题。
.aar
与.jar
区别不同于.jar
不同于.zip
。 它对于哪种types的内容应该有一定的概念,但是.jar
和.aar
通常都包含编译类和资源。 .aar
只是指定该库是Android的具体和有一些预期的结构,合理的这样的库(以及.jar
也有一些预期的结构)。
.aar仅支持Android视图的视图也被弃用。 这样的库可以部署到Maven Central,像gradle这样的工具可以使用@aar后缀引用它们,例如:
dependencies { compile ('io.github.andviane:uncover:2.0.1@aar') .. }
来引用这个 Maven中央部署。