首页 文章

Android档案库(aar)vs标准jar

提问于
浏览
117

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

3 回答

  • 9

    由于以下原因, AAR 文件更类似于 Jar s而不是 Dll s:

    Dll可以在应用程序之间共享,其中AAR和jar与您的应用程序一起打包 .

    AAR s vs Jar s:

    Jar和AAR之间的主要区别在于AAR包括布局,绘图等资源 . 这使得创建自包含的可视组件变得更加容易 . 例如,如果您有多个使用相同登录屏幕的应用程序,使用Jars可以共享类而不是布局,样式等,您仍然需要复制它们 . 使用AAR,一切都捆绑在一个整洁的包装中 .

    总之, AAR 是向正确方向迈出的一大步 .

    Note:
    apk-lib 进行了类似的尝试,但由于 AAR 更好,它们现在已经过时了 .

  • 3

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

    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的任何文件格式,包括使用生命周期增强功能和新组件 . 这里有一个简单的例子How do I create a new packaging type for Maven?

  • 193

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

相关问题