我一直在阅读一些关于Gradle作为Android应用的标准构建系统的新应用的文章。好吧,来自标准的Java开发,我通常依赖 jar 文件来构建我的项目。但是,似乎Android还有 aar 软件包,它们相当于Windows操作系统中的 dll 文件,如上所述here:
首先,您必须意识到Android平台不允许应用级“共享库”。在“传统”编程语言平台,C,C ++,Java中,您可以命名它,我们有这种共享运行时库的机制。 (例如,Windows上的DLL,Unix上的DSO,JVM上的Jar等)。但是,在Android上,除非您是Google或手机制造商,否则您无法做到这一点(请参阅下面的脚注1)。作为应用程序开发人员,这可能是一个基本限制。在构建时和运行时“共享”或“重用”代码是软件工程实践中非常重要的一部分。由于上述限制,这在Android上相当困难(并非不可能,更难)。
然而,我对这个概念有些怀疑。我的意思是,开发人员何时应该对其应用程序中包含 aar 依赖项感兴趣?这种依赖关系是否收紧了某些SDK最低版本?
例如,在一个项目中,我访问了一个COM端口,我使用NDK precompiled .so 库。如果我想分享这个实用程序,我是否必须创建一个aar?
答案 0 :(得分:198)
AAR
个文件与Jar
的文件更相似,而不是Dll
个文件:
Dll
可以在AAR
和jars之间的应用程序之间共享 与您的应用程序一起打包。
AAR
s vs Jar
s:
Jar
和AAR
之间的主要区别在于AAR
s包含 资源,如layouts, drawables
等。这使得它更容易 创建自包含的可视组件。例如,如果你有 使用相同登录屏幕的多个应用程序,Jar
即可 分享课程,但不是布局,风格等,你仍然必须 复制它们。使用AAR
时,所有内容都捆绑在一个整齐的包中。
总之,AAR
是迈向正确方向的重要一步。
注意:
对apk-lib
进行了类似的尝试,但由于AAR
更好,它们现在已经过时了。
答案 1 :(得分:9)
语句“ Jar和AAR之间的主要区别在于AAR包括布局,drawable等资源。”与JAR文件规范不对应,因此不是事实。 根据{{3}}:
JAR文件是基于流行的ZIP文件格式的文件格式,用于将多个文件聚合为一个文件。 JAR文件本质上是一个包含可选META-INF目录的zip文件。
正如您所看到的,没有内容限制禁止在JAR文件中包含布局,绘图等资源。有关更多详细信息,请参阅Java®虚拟机规范的第5.3条“创建和加载”。
所以关于Android Archive Library(aar)vs标准jar的问题。答案取决于您使用的构建工具。
如果您使用Android Studio作为构建工具(分别作为项目组织者),您最好使用* .aar文件在Android项目之间共享封装资源。 AAR文件格式是Android Studio构建的一部分,因为它在其他评论中有评论,其用户界面支持Android库的aar格式。
但除了Android Studio之外,世界其他地方都不知道那个东西是什么文件(神器)。例如,如果您的Android构建基于Maven,则资源共享的首选文件将是jar,因为这是本机Maven java项目工件,并且对标准jar文件中的内容没有限制。此外,还有一种方法可以解释Maven的任何文件格式,包括使用生命周期增强功能和新组件。这里有一个简单的例子JAR file specification
答案 2 :(得分:3)
问题中的引用与当前的现实没有任何共同之处。当然可以在Android中使用外部库,并且有很多库可用。也许他们想说每个应用程序必须捆绑它需要的所有库,但是在构建时重用库(静态链接)确实不是问题。
.aar
与.jar
的差别不超过.jar
与.zip
的差异。它有一些关于应该在哪种内容中存在的概念,但.jar
和.aar
通常都包含已编译的类和它们的资源。 .aar
只是指定该库是特定于Android的,并且具有一些预期的结构,对于这样的库是合理的(好吧,.jar
也有一些预期的结构)。
仅支持Android工作室的.aar视图也已弃用。这些库可以部署到Maven Central,像gradle这样的工具可以使用@aar后缀来引用它们,例如:
dependencies {
compile ('io.github.andviane:uncover:2.0.1@aar')
..
}
引用this Maven中央部署。
答案 3 :(得分:2)
JAR 与 AAR
JAR
– Java 档案。包含 .class
、java 资源
AAR
– Android 存档。包含 classes.jar
和其他 Android 相关文件,如 AndroidManifest.xml、R.txt、proguard.txt、res 文件夹(布局、值、可绘制)等。
Android 可同时处理 jar
和 aar
文件。作为库开发者,通常 aar
用于共享 Android 资源,否则 - jar
喜欢更轻量级和通用的分发工件的方式。
由于 aar
包含 jar
,您可以使用它[About]
区别:
答案 4 :(得分:-2)
主要区别是aar在android中拆分为jar。
如果您的应用仅在android studio中仅在用户应用中使用,则首选aar。
如果您打算让应用程序与c / c ++编译的lib.so文件jar通信,则是首选。
根据要求使用罐子和罐头,使罐头工作容易, 增强了灵活性。
据我所知,直到android 5棒棒糖。我不知道是新版本。