Android studio打包及引用aar

作者: csmijo | 来源:发表于2016-07-13 19:29 被阅读13748次

Android aar


1. 简述

Gradle的一些基本依赖配置方式如下:

  • compile fileTree(dir:'xxx',include:['*.jar','*.xxx']): 将某个目录下所有符合扩展名的文件作为依赖
  • compile 'com.xx.xx:ProjectName:Version':配置Maven库为依赖
  • compile project(':otherModule'):配置另一个module作为本Module的依赖,被依赖的Module必须被导入到当前工程中
  • compile file('xxx.jar'): 配置某个jar包作为依赖

2. AAR文件简介

假如我们希望提供一个带有资源文件的第三方库给别人使用,总不能直接把源代码给别人,但是我们知道eclipse打包的时候不能包含res的资源文件,于是Android在发布Android studio的时候就发布了一种独有的格式AAR,专门用于打包UI组件库。与jar相比其多了一些UI组件用到的属性、图片等一系列文件,它的好处在于你不需要再多创建一个Library Module,只需引用这个AAR文件即可,Android Sudio会自动把AAR包里的文件跟你的项目融合。

要输出aar文件,必须将Module配置为library,在gradle文件中如下:

  • 要输出 aar:apply plugin:'com.android.library'
  • 要输出 apk:apply plugin:'com.android.application'

3. 打包生成 aar

将 Module 配置为 library 后,构建输出一个 aar 文件,根据渠道和 BuildType 的不同,在相应的目录下可以找到。比如对 BuildType 为 debug 的配置,输出为:[ModuleName]/build/outputs/aar/[ModuleName]-debug.aar。一份 aar 文件其实就是一份 zip 包,和 jar 不同的是,它将一些资源文件、第三方库文件、so 文件等等都打包在内,而代码文件编译后压缩在classes.jar中。

4. 使用配置依赖的方式引用

  1. 首先需要将 aar 文件放入引用Module的libs目录下,和一般的jar文件类似;

  2. 然后在gradle配置文件中把libs 目录放入依赖:

    repositories{
            flatDir{
                dirs 'libs'
                }
            }
    
  3. 在gradle文件中使用依赖的方式引用aar,这一句依赖即可关联完毕:
    compile(name:'xxx',ext:'aar')

  4. 重新构建一下工程,在Module的 build/intermediates/exploded-aar 目录下,既可以看到导入的aar生成的临时文件。


参考文献:

相关文章

网友评论

  • felix_forever:发现没有exploded-aar这个目录,项目也引用不了。
  • _10_01_:不错,也看到一篇安卓官网介绍创建安卓库的文章:
    https://developer.android.google.cn/studio/projects/android-library.html
  • 妙法莲花1234:依赖是这样的,没有冒号,然后你少了个括号,麻烦更新下啊,方便后来者方便接入: :smile:

    repositories {
    flatDir{
    dirs 'libs'
    }
    }
    csmijo:@追风917 已修改,谢谢提醒
  • 10a3e6d96de2:为什么aar模块 的compile的依赖包没有打到aar里面去?
    Simon_Zhang:@csmijo 你说的应该是第二种情况!
    Simon_Zhang:@csmijo
    1. 编译后自动会在build/outputs/aar目录下生成.aar文件。此aar仅打包了Library工程的class、libs和资源文件,但Library引用的其他库(比如compile “com.squareup.okhttp3:okhttp:3.4.1”)并未包含在aar中。使用Library时还需把它引用的库再手动声明一遍,差评!
    2. 发布到本地Maven库(或jCenter、MavenCentral)。发布出来的内容除了aar还包含了Library的所有dependencies信息。使用时直接设置好maven库地址,声明引用Libraray,gradle就会帮你自动引用Library中嵌套引用的所有dependencies了。

    csmijo:@lengqi 我使用demo项目发现确实是有这样的问题,这是我google到的原因。
    1. http://stackoverflow.com/questions/22795455/transitive-dependencies-not-resolved-for-aar-library-using-gradle?rq=1,这里提供了一个解决方法,添加transsitive=true属性,但是我尝试后发现还是出现运行时错误
    2. http://stackoverflow.com/questions/36473906/gradle-download-dependencies-of-included-aar-library?rq=1,这里面的方法我觉得是正确的解决方案,但是我没有使用maven repository尝试。在新项目中声明aar模块使用的依赖这种方式是可以解决的。因为arr中不包含描述依赖的pom文件,所以导致classNotfound的错误,
    希望回答能对你有点启发。

本文标题:Android studio打包及引用aar

本文链接:https://www.haomeiwen.com/subject/qifejttx.html