什么是AAR文件以及如何在Android开发中使用

上周部门知识分享会上分享了关于如何在Android开发中使用gradle的话题,其中涉及到了aar文件的使用,经过一番讨论引申出了更多有趣的问题,留下了很多迷惑之处,经过研究后决定将成果记录于此。

概述

aar是什么?

aarAndroid Archive的缩写,而我们熟悉的jar则是Java Archive的缩写.说白了`aar就是一种类似于Jar的打包格式。

aarjar有什么异同?

aarjar非常类似,基本上都可以理解为一个压缩文件( zip-file )。jar中包含了编译后的class文件以及一些包含元数据的文本文件。而aarjar多了些Android特有的一些文件,例如layout文件,drawable文件以及manifest文件。说白了,一个aarAndroid中就是一个完整的Module.

Jar是被广大java世界的成员所熟知的,但是Aar除了Android Studio认识它,其他人根本不屌它,因为压根不认识这货。

如何生成AAR文件

Android Studio中添加一个Android Library,然后在此库中开发你所要实现的功能,单独编译此库后,在其outputs目录下就会生成相应的aar文件。如下图所示
arr目录

如何使用AAR文件

Android Studio中使用aar文件有两种方法:

第一种方法:

1.打开菜单:File->New->New Module …后进入Module选择弹窗,选择导入.JAR/.AAR的选项

这里写图片描述
2.这样aar文件就会出现在你项目的层级下面,好像一个Module一样。

3.这样导入的aar文件,系统已经在settings.gradle中帮你配置好了

include ':app', ':calculatelib-debug'

你只需要在**app**Module中的gradle文件中配置依赖即可。

dependencies {
    ...
    implementation project(path: ':calculatelib-debug')
}

第二种方法:

这种方法是我们比较常用的,网上也多是这种方法的介绍,这部分有趣的事情很多,带出来的知识点也比较多,我们先讲如何正确的使用,然后做一些有趣的探讨。

1.在libs文件夹里建立一个新的文件夹aars(至于为什么要新建一个文件夹后面再说),将要使用的aar文件放到aars文件夹中。

2.在app模块下的build.gradle文件中加入如下代码

repositories {
    flatDir {
        dirs 'libs/aars'
    }
}

此代码段与dependencies块相同级别

3.在dependencies下加入依赖

dependencies {
    ...

    compile(name:'calculatelib-debug', ext:'aar')
}

通过以上3步就可以使用aar文件了。

代码分析

疑问1:
下面这段代码什么意思,不加的话可以通过编译吗?

repositories {
    flatDir {
        dirs 'libs/aars'
    }
}

首先不加肯定是不行,但是加了表示什么意思呢?这还的从gradle处理依赖的原理说起,一般情况下我们我们用的最多的就是远程代码仓库。尤其以Maven仓库最多,为此,Gradle还为其提供了别名。

  • mavenCentral()别名,表示依赖是从Central Maven 2 仓库中获取的。
  • jcenter()别名,表示依赖是从Bintary’s JCenter Maven 仓库中获取的。
  • mavenLocal()别名,表示依赖是从本地的Maven仓库中获取的。

除了Maven仓库以外还有其他仓库,例如我们这里使用到的Flat Directory仓库,上边那段代码就是在app这个Module下构建了Flat Directory仓库,那么gradle系统就会在我们指定的目录下搜索依赖,那样就找到了我们的aar文件。

疑问2:
我们可以把下面这段构建Flat Directory仓库的代码

flatDir {
    dirs 'libs/aars'
}

可以放在工程下面的那个build.gradle里面的buildscript模块下面吗?例如下面这样

buildscript {
    ext.kotlin_version = '1.2.30'
    repositories {
        google()
        jcenter()

        flatDir {
             dirs 'libs/aars'
        }

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

点击同步gradle后发现不行

疑问3:那么可以放在工程下面的那个build.gradle里面的allprojects模块下面吗?例如下面这样

allprojects {
    repositories {
        google()
        jcenter()

        flatDir {
            dirs 'libs/aars'

    }
}

发现可以正常工作,那么发生了什么?

要想明白这个问题需要先搞清楚这两个模块里面的配置分别是干什么的,有什么不同。

buildscript里面的配置是在配置gradle自己,例如决定gradle如何来执行编译。所以你会看到Android Gradle 插件,以及Kotlin插件都在这里面引用的。

allprojects是配置那些要被gradle编译的Module的。

通常情况下,这两部分的repositories里面的配置是一样的,那是因为两者都需要从相同的远程仓库,例如Jcenter里面获得依赖。但是dependencies部分的配置就完全不一样了。通常情况下allprojects里面的dependencies部分是空的,那是因为每个模块的依赖项都不一样,都配置到了各自模块下面的gradle文件中了。如果一个工程中的所以模块都依赖同一个库的话,就可以将其配置在这里了。

以上就是关于AAR文件我们应该了解的。

  • 25
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Android开发,引用其他aar库的资源文件需要进行一些操作才能显示出来。 首先,我们需要在项目的build.gradle文件添加对aar库的依赖。在dependencies块,添加类似以下的代码: ```groovy implementation(name: 'library-aar', ext: 'aar') ``` 然后,在项目的AndroidManifest.xml文件,添加以下代码: ```xml <meta-data android:name="com.library.aar.SampleApplication" android:value="Resource"/> ``` 接下来,我们需要在项目的res/values目录下的attrs.xml文件声明aar使用的自定义属性。例如: ```xml <attr name="sampleAttribute" format="string"/> ``` 接着,在项目的res/layout目录下的layout.xml文件引用aar库的资源文件。例如: ```xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" custom:sampleAttribute="sampleValue" /> </RelativeLayout> ``` 最后,我们需要在项目的MainActivity.java文件找到对应的控件,并设置aar的资源文件。例如: ```java TextView textView = findViewById(R.id.textView); textView.setText(getResources().getString(R.string.sample_resource)); ``` 上述是对于引用aar库资源文件的一般操作,但是在实际开发还可能会遇到其他问题,比如aar库的版本兼容性等。如果上述操作无法解决问题,还需要进一步查找原因及解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShuSheng007

亲爱的猿猿,难道你又要白嫖?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值