Android Studio中多moudle依赖本地aar文件的配置

在Android开发中,我们有时会引入其他第三方的库或者资源等,可能是添加一个jar文件,也可能是添加一个aar文件,又由于aar可以包含资源文件,所以android库通常会打成aar格式的文件,在工程中引用的时候通常有两种方式,一种是引用Maven库中的aar,一种是将aar拷下来,放在libs文件夹下。引用Maven库中的aar比较简单,这里说一下自己在引用本地aar的时候遇到的问题。引用本地的aar也分两种情况:

一、单个moudle依赖aar

直接依赖比较简单:

  1. 先将aar文件拷到libs文件夹下
  2. 在app下的build.gradle文件中作以下配置
repositories {
    flatDir {
        dirs 'libs' //声明文件目录做为依赖库,'libs'路径是build.gradle的相对路径,目录名称可以任意
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs') //如果只有aar包,这行可以不要
    compile (name:'alicloud-android-push-3.1.3', ext: 'aar')
}
  1. 这样就配置完了,重新编译就可以了。

二、多个moudle依赖aar

在多moudle的工程中,我们会很自然地想到把一些公用的aar包放到一个公共的lib库中,而其它moudle依赖这个lib库就可以了。我也是这样想的,以为把上面的配置直接放到lib库中的build.gradle文件中就可以了,没想到在 sync gradle的时候报错了:

Error:Failed to resolve: :alicloud-android-push-3.1.3:
       Open File

alicloud-android-push-3.1.3 就是要依赖的aar,当时觉得好纳闷。就上网查了一下,才发现多moudle依赖aar并不是直接在lib库中直接配置一下就行了,还要在其它moudle中指定aar所在的文件夹,具体做法是这样的:

  1. 将aar文件拷到公共库(如下面的 lib_framework)的libs文件夹下
  2. lib_framework中的build.gradle文件按照以下方式配置
// project/lib_framework/build.gradle文件中的配置
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs') //如果只有aar包,这行可以不要
    compile (name:'alicloud-android-push-3.1.3', ext: 'aar')
}
  1. Project中的build.gradle文件中按照以下配置指定依赖库目录即可,注意是在 Project中的build.gradle文件,就是最外层的 build.gradle文件。
// project/build.gradle文件中的配置
allprojects {
    repositories {
        google()
        jcenter()

        flatDir {
            // 声明所有工程都将'lib_framework'库下的'libs'目录做为依赖库
            dirs project(':lib_framework').file('libs')
    }
}
  1. 然后重新 sync 一下,就不会报错了。

由于水平有限,如果文中存在错误之处,请大家批评指正,欢迎大家一起来分享、探讨!