前言

前段时间,我在实现gradle多模块构建遇到一个问题,以前我们基本上是以jar包形式让开发者集成到工程中使用,但自从Android Studio中有了多module的概念,而我们的SDK也是分了多个模块进行构建的,但我们这里有个问题就是模块之间是相互关联的,不能针对每个模块单独打包,而每个module都会生成对应的aar,但并不会把依赖的module代码打进去,别问我为什么知道,你将aar后缀改为zip,然后反编译classes.jar就可以看到。所以我们这边就有了合并aar这样的一个需求,下面就告诉大家怎么来实现。

android-fat-aar

当时我遇到这个问题,就去github搜了一下,已经有人将合并aar的脚本开源出来了,开源地址如下:

什么是aar?

什么是aar?它跟jar包有什么区别?它该怎么样使用?相信大家一定会有这些疑问。首先aar是针对Android Library而言的,你可以理解为IDE针对Android Library的打包,一个aar包含什么东西?

它的文件后缀名是.aar,它本身是一个zip文件,强制包含以下文件:

/AndroidManifest.xml

/classes.jar

/res/

/R.txt

另外,AAR文件可以包括以下可选条目中的一个或多个:

/assets/

/libs/name.jar

/jni/abi_name/name.so (where abi_name is one of the Android supported ABIs)

/proguard.txt

/lint.jar

jar包跟aar包有什么区别?

jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。

aar:包含所有资源,class以及res资源文件全部包含。

如果你只是简单实用一些类库,你可以直接使用*.jar文件,而如果你想既想使用类库,又想实用资源,那么你就可以创建一个Android Library,使用它生成的*.aar文件。

jar文件的使用方式我们应该比较熟悉了,将它复制到工程的libs目录下,然后在gradle中添加以下脚本:

dependencies {

compile fileTree(include: [‘*.jar‘], dir:‘libs‘)

}

aar文件使用同样需要复制到libs目录下,并按照以下方式集成:

repositories {

flatDir {

dirs‘libs‘

}

}

dependencies {

compile(name:‘your aar‘, ext:‘aar‘)

多模块构建合并aar

这个是本文的重点,我们可以再每个module下的build/outputs/aar下找到编译生成的*.aar文件。

步骤1:

将gradle文件’fat-aar.gradle’到你的项目目录,然后apply:

apply from: ‘fat-aar.gradle‘

步骤2:定义嵌入的依赖关系

你需要修改你以前依赖项,并将compile更改为embedded,作为你想要合并的aar。使用例子如下:

apply from: ‘fat-aar.gradle‘

dependencies {

compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])

// Order of dependencies decide which will have precedence in case of duplicates

// during manifest / resource merger

embedded project(‘:librarytwo‘)

embedded project(‘:libraryone‘)

// We can embed android libraries from maven too

embedded ‘com.adwiv.internal:librarythree:1.0.0‘

compile ‘com.android.support:appcompat-v7:22.2.0‘//Non embedded dependency

}

通过以上的方式你可以将多个module生成的aar合成一个,大家可以新建一个demo工程来测试下

android 多个aar合并,Android多模块构建合并aar解决方案相关推荐

  1. ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。

    DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...

  2. 解决编译不通过Could not find support-compat.aar (com.android.support:support-compat:26.0.0).

    android 编译报错: > Could not find support-compat.aar (com.android.support:support-compat:26.0.0).Sea ...

  3. 1.2、Android Studio为新设备创建一个模块

    2019独角兽企业重金招聘Python工程师标准>>> 模块为你的应用的源码.资源文件和app level设置(比如AndroidManifest.xml)提供了一个容器.每个模块可 ...

  4. Error:Could not find appcompat-v7.aar (com.android.support:appcompat-v7:26.1.0). Searched in the fol

    项目之前好好地,今天打开突然报错了.AS版本2.3.3 Error:Could not find appcompat-v7.aar (com.android.support:appcompat-v7: ...

  5. android中json插件,【Android原生插件】package.json中关于第三方aar的配置

    按照文档(https://ask.dcloud.net.cn/article/35414)所说: dependencies节点特殊说明 android插件中集成的第三方SDK 如果是jar或so放入到 ...

  6. Android Studio(8)---为新设备添加模块

    为新设备添加模块 模块为应用程序的源代码,资源文件和应用程序级别设置提供容器,例如模块级构建文件和Android清单文件.每个模块都可以独立构建,测试和调试. Android Studio使用模块可以 ...

  7. android在java下建立模块,Android Studio:如何在Android模块中包含Java模块?

    在Android工作室我有一个Android模块,我们称之为MyAndroid.我还有一个Java模块(不是独立的JAR,而是模块中的完整Java项目),我们称之为MyJava.Android Stu ...

  8. android aar管理,android 库依赖管理之一aar依赖

    依赖分为公共mavn库依赖,私有maven库依赖,本地仓库依赖,aar依赖,module直接依赖. 方案1: repositories { flatDir { dirs 'libs' } } depe ...

  9. android 生成aar文件,Android 中.aar文件生成方法与用法

    https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...

最新文章

  1. 简述python的主要功能和特点_Python的基本知识和特点及功能详细说明
  2. 你也许不知道的Vuejs - 使用ES6快乐的玩耍
  3. 再来一顿贺岁宴 | 从K-Means到Capsule
  4. Oracle Scheduler - NLS_ENV
  5. COCO数据集提取自己需要的类,转VOC
  6. System calls
  7. Html5新增表单属性
  8. html5canvas绘制图片源码,HTML5 CANVAS:绘制图片
  9. inDesign教程,如何将内容与参考线对齐?
  10. 诊断 Linux 服务器的性能
  11. android 转场动画 4.4,Android高级UI开发(二十七)Material Design之转场动画(一)
  12. 核电厂功能安全分类、软件可靠性以及相关标准
  13. 泰克示波器面板上的旋钮的作用有哪些
  14. 科研笔记(六) 基于环境感知的室内路径规划方法
  15. android系统提供的常用命令行工具
  16. 黑金ZYNQ MPsoc 开发遇到的问题以及解决记录
  17. HTML字体以及图标字体iconfont、Font Awesome的使用
  18. Android平台GB28181设备接入模块之球机/云台控制探究
  19. 把 Notepad++ 打造成一款易用的C#脚本编辑器
  20. LVS负载均衡之DR模式

热门文章

  1. SMP,UMA,NUMA,MPP的概念理解
  2. 容错对于游戏体验的重要性
  3. ubuntu配置网易云音乐
  4. ManjaroArch 自动挂载NTFS分区
  5. 较于微信红包,支付宝AR红包是个好产品吗?
  6. CS231n课程笔记翻译9:卷积神经网络笔记
  7. c语言用分支结构判断最大字符,第3章C语言 分支结构PPT课件.ppt
  8. 【图像识别】基于模板匹配算法求解车牌识别问题matlab代码含GUI界面
  9. 微信小程序为啥有的时候不显示封面广告、以及其他广告
  10. 完整版 Chrome 浏览器将登陆 Fuchsia OS