Android多模块构建合并aar解决方案

前言

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

android-fat-aar

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

https://github.com/adwiv/android-fat-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

具体看到这里看如何创建一个Android Library:

https://developer.android.com/studio/projects/android-library.html#aar-contents

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工程来测试下

时间: 2024-10-10 12:44:12

Android多模块构建合并aar解决方案的相关文章

Gradle自动实现Android组件化模块构建

背景 随着App的不断迭代,业务会变得越来越复杂,业务模块会越来越多,且每个模块的代码也会变得越来越多.为了应对这一场景,我们需要把不同的业务模块划分成一个个组件,在修改业务代码的时候只需要在对应模块修改就可以了.通过高内聚,低耦合的业务模块来保证工程的健壮性和稳定性.现在问题来了,当组件的数量变得越来多的时候,我们如何管理业务组件呢? 原创声明: 该文章为原创文章,未经博主同意严禁转载. 为什么我们要用Gradle管理组件呢? 先来看看Android组件化需要实现的目标.(什么是组件化构建?)

转载_加速Android Studio/Gradle构建

转自:加速Android Studio/Gradle构建 随着项目的增大,依赖库的增多,构建速度越来越慢,现在最慢要6分钟才能build一个release的安装包,在网上查找资料,发现可以通过一些配置可以加快速度,这里跟大家分享一下. 开启gradle单独的守护进程 在下面的目录下面创建gradle.properties文件: /home/<username>/.gradle/ (Linux) /Users/<username>/.gradle/ (Mac) C:\Users\&l

[转]加速Android Studio/Gradle构建

加速Android Studio/Gradle构建 android android studio gradle 已经使用Android Studio进行开发超过一年,随着项目的增大,依赖库的增多,构建速度越来越慢,现在最慢要6分钟才能build一个release的安装包,在网上查找资料,发现可以通过一些配置可以加快速度,这里跟大家分享一下. 开启gradle单独的守护进程 在下面的目录下面创建gradle.properties文件: /home/<username>/.gradle/ (Lin

Android Studio的构建系统:Gradle

原文作者:youxiachai <用Gradle 构建你的android程序> 前言 android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android studio 用的是gradle 来构建项目, 下定决心把android gralde 构建项目的用户指南全部看完, 让不会用gradle 的人也用gradle构建android项目,让打包(注意,打包和构建是两码事)多版本android不再痛苦.最后,题外话:珍惜生命,远离ant.... Gradle buil

Android Studio 打包及引用 aar

Android Studio 打包及引用 aar 1. 简述 在比较大的 Android 项目的开发中,我们经常会遇到工程.jar 包等等之间相互引用的方式.一般我们通过在 gradle 文件中配置依赖来解决,比如: Gradle 的一些基本依赖配置方式如下: compile fileTree(dir: 'xxx', include: ['*.jar', "*.xxx"]):将某个目录下所有符合扩展名的文件作为依赖: compile 'com.xx.xx:ProjectName:Ver

React Native Android原生模块开发实战|教程|心得|如何创建React Native Android原生模块

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 前言 一直想写一下我在React Native原生模块封装方面的一些经验和心得,来分享给大家,但实在抽不开身,今天看了一下日历发现马上就春节了,所以就赶在春节之前将这篇博文写好并发布(其实是两篇:要看iOS篇的点这里<React Native iOS原生模块开发>). 我平时在用React Native开发App时会

Android Studio下构建Maven私服

Android Studio下构建Maven私服 对Maven的理解 Maven仓库的分类 本地Maven仓库和远程Maven仓库(中央仓库,第三方仓库,私服) jcenter和MavenCenter 略 搭建Maven私服 一.下载并安装Maven环境 需要注意的是:后面需要修改Settings setting文件3.0之前在C:\Users\xxx.m2下,其实AndroidStudio通过JCenter下载的jar即放在这个文件夹下.3.0之后在Maven目录的conf下 二.下载并安装N

Android - Gradle项目构建依赖

Gradle项目构建依赖 本文地址:http://blog.csdn.net/caroline_wendy Android使用Gradle构建时,由于模块之间的依赖关系,和Gradle升级的兼容性,会导致异常,常见的问题: (1) Error: No such property: target for class: com.android.build.gradle.LibraryExtension_Decorated. 删除target = 'android-20',最新版本的Gradle已经不

React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息.为大家精心准备的React Native视频教程公布了,大家现能够看视频学React Native了. 前言 一直想写一下我在React Native原生模块封装方面的一些经验和心得.来分享给大家,但实在抽不开身.今天看了一下日历发现立即就春节了.所以就赶在春节之前将这篇博文写好并公布(事实上是两篇