第十章 Android Gradle多项目构建

简介: Android的多项目和其他基于Gradle构建的多项目是差不多,比如Java多项目、Groovy多项目,他们本身都是Gradle的多项目构建,唯一的区别是项目本身属性,比如这个项目是Java库、那个是Android App项目等等。这一章我们简单的介绍下Android不同类型的项目,他们如何设置,如何引用以及库项目如何单独发布,像因多项目导致的65535等问题我们已经在上一章节做了介绍,这里就不再重复了。

Android的多项目和其他基于Gradle构建的多项目是差不多,比如Java多项目、Groovy多项目,他们本身都是Gradle的多项目构建,唯一的区别是项目本身属性,比如这个项目是Java库、那个是Android App项目等等。


这一章我们简单的介绍下Android不同类型的项目,他们如何设置,如何引用以及库项目如何单独发布,像因多项目导致的65535等问题我们已经在上一章节做了介绍,这里就不再重复了。


10.1 Android项目区别


Android的项目一般分为 库项目、应用项目、测试项目,Android Gradle根据他们分别有3种插件


com.android.library、com.android.application、com.android.test。


库项目一般和我们的Java库非常相似,它比Java多的是一些Android特有的资源等配置。一般一些具有公用特性的类、资源等可以抽象成一个库工程,这样他们就可以被其他不用的项目引用;还有一种情况,比如我们的工程非常负责,我们可以根据我们业务,把我们的工程分成一个个的库项目,然后通过一个主的应用项目引用他们,组合起来,就是我们最终的产品->一个复杂的App了。


应用项目,一般只有一个,它可以打包成我们可发布的Apk包,如果工程太复杂,就像上面说的,它会引用很多的库项目,以便组成一个最终的App发布。应用项目有时也会有多个,比如我们发布了不同特色的App,但是他们又是同类产品,比如QQ的标准版、轻聊版,他们是同类产品,只不过轻聊版更简洁,去除了很多冗余的功能,这时候我们就可以创建两个应用项目,让他们引用不用的库项目,然后再分别根据需求做出相应的调整,就可以生成两个不同的App,满足不同人群的要求。


测试项目是我们为了对我们的App进行测试而创建的,比如测试Activity、Service、Application等等,他是Android基于Junit提供的一种测试Android项目的框架方法,让我们可以方便的对我们的Android App进行测试,保证质量。


10.2 Android多项目设置


多个项目的设置和Gradle的多项目是一样的,Android也是基于Gradle的,所以项目其实是Gradle的概念,项目自身的特性才是每个领域的细分和定义,比如Android项目、Java项目等等。


定义一个工程,包含很多项目,在Gradle中,项目的结构没有那么多的限制,不像我们用Eclipse+Ant构建的时候,路径都限制的很多,比如只能在根目录下等等,在Gradle中就没有这么多限制了,你可以通过文件夹组织你不同的项目,最终只要在setting.gradle里配置好这些项目即可。比如如下的项目结构:


image.png


严格的说应该是四个项目,还有一个根项目MyProject。根项目会有一个setting.gradle配置文件,每个项目里都有一个build.gradle文件,所以他们的结构为:


image.png

这就是一个完成的工程了,里面只要再加上一些Java文件、资源等等,就可以编译运行了,我们看下setting.gradle配置文件,也是非常简单的。


image.png


就是指定这几个项目,有时候如果项目的路径太深,我们可以用如下方法指定配置:


image.png


通过如上方法我们直接指定项目的目录即可。这样我们整个多项目配置的架子算是搭好了,增减项目可以模拟这个框架。


10.3 库项目引用和配置


多项目配置好之后,就要引用他们,尤其是库项目,不然我们多项目协作开发还有什么意义呢?一般引用的都是库项目,所以这里我们着重讲库项目引用。


Android库项目引用和Gradle的其他引用是一样的,都是通过dependencies:


image.png


这样我们就引用了这个lib库项目,就是这么简单,沿用了Gradle的依赖来进行关系,关于Gradle依赖可以请参考我们前面章节讲的。


需要特别说明的是Android App项目不光可以引用Android Lib项目,还可以引用Java Lib项目哦,这个看我们的需求,Android Lib是打包成一个aar包,Java Lib是打包成一个jar包,如果我们里面有资源,就是用Android Lib,如果没有并且是纯Java的可以考虑Java Lib。


引用Android库项目是引用的一个库项目发布出来的aar包,默认情况下,Android库项目发布出来的包都是release的,当然我们可以通过配置来改变它,比如改成默认发布的是debug的


image.png


这样我们就改成发布的是debug版本的aar包了,我们可以通过如上方式配置不同的发布版本,只要我们配置的这个名字是合法存在的即可--也就是Assemble任务能够打包出来的aar包。比如你配置了多个flavor,那么我们发布的就可以针对不同的flavor+buildtype配置,比如:


image.png


这样我们就发布了flavor1Debug这个aar包以供其他的的项目引用。


有朋友可能要问了,如果想同时发布多个版本的aar包以供不同的项目引用怎么办?比如我们要做一个产品,他们有不同的版本,但是都是一个产品,比如一个专业版,一个标版,他们有一些区别,不光是在App项目里体现,在我们的库工程里也要体现(比如库工程里针对这两种版本的资源不一样),这时候我们需要针对不同的版本,引用不同的发布的aar包。这是可以做到的,默认情况下是不能同时发布多个aar包的,我们可以开启。


image.png


这时候就是告诉Android Gradle插件我们这个库工程要同时发布不同的aar,这时候Android Gradle就会生成多个aar以供被其他项目引用,下面看下我们怎么分别引用他们。


image.png


看到这里大家看明白了把,对于lib这个库项目,我们先配置成可以同时发布多个aar,然后我们在其他引用工程里做如上示例的引用,比如flavor1这个渠道包就引用flavor1这个渠道对应的lib1库的release aar包;flavor2这个渠道就引用flavor2这个渠道对应的lib1库的release aar包。


以上这些引用都是在项目立直接引用,下一节我们讲如何发布我们的aar包到Maven中心库,以供其他项目引用。


10.4 库项目单独发布


项目直接依赖一般适用于关联比较紧密、不可复用的项目,对于这类项目我们可以直接基于源代码项目的依赖,有时候我们会有一些项目,可以被其他项目所复用,比如我们的公共组件库,工具库等等,这类就可以单独发布出去,被其他项目使用,就像我们引用jcenter上的类库一样方便,这一节我们就讲如何把库项目单独的发布到我们自己的Maven中心库.


要搭建自己的Maven私服,推荐使用Nexus Repository Manager,版本选择2.xx,下载地址: http://www.sonatype.com/download-oss-sonatype ,我这里选择的是2.12.1版本,我们选择nexus-2.12.1-01-bundle.tar.gz包下载解压,然后找到nexus-2.12.1-01\bin\jsw这个目录,可以看到有很多以操作系统和cpu架构命名的文件夹,你可以根据你的系统选择进入相应的文件夹运行start-nexus脚本即可启动Nexus,启动之后,我们在浏览器里打开 http://localhost:8081/nexus/ 即可访问,注意看右上角有个Log In链接,点击可以登陆管理Nexus,默认的用户名是admin,密码是admin123。关于Nexus的搭建和使用,非常简单,大家可以Google下相关文章,很容易的就会入门使用,这里不再多讲。


有了部署好的Nexus Maven中心库之后,我们就可以把我们的项目发布到我们的中心库了,要想通过Maven发布,首先我们得在build.gradle中应用maven插件:

apply plugin: 'com.android.library'
apply puugin: 'maven'


应用过之后,我们需要配置Maven构建的三要素,他们分别是group:artifact:version。

apply plugin: 'com.android.library'
apply puugin: 'maven'
version  '1.0.0'
group 'ory.flysnow.widget'


group和version比较方便,直接指定即可。对于version还有一个概念-快照版本SNAPSHOT,比如配置成1.0.0-SNAPSHOT,这时候我们在发布的时候就会发布到我们的snapshot中心库里,每次发布版本号不会变化,只会在版本号后之后按顺序号+1,比如1.0.0-1,1.0.0-2,1.0.0-3等等,类似于这样的,我们引用的时候版本号写1.0.0-SNAPSHOT即可,Maven会帮我们下载最新(序号最大的)的快照版本,这种方式适用于联调测试的时候,每次修复好测试的问题就发布一个快照版本,直到没有问题为止,然后再放出release版本,正式发布。


配置好group和version之后,我们来配置发布配置,比如发布到到哪个Maven库,使用的用户名和密码多少,发布什么格式的存档,它的artifact是什么等等:


网络异常,图片无法展示
|


如上所示,我们配置了uploadArchives,指定对应的mavenDeployer配置,这里配置了两个发布的Maven库,一个是release版本的,一个是snapshot版本的,并同时配置了他们的密码以及URL,URL是nexus maven提供的,可以打开Nexus网页版,点击右侧的repositorys菜单查看,里面配置了很多库,我们也可以新增一些自己的repository。


发布到Nexus Maven库之后,我们就可以像引用jcenter中的类库一样引用他们,要使用他们,我们首先得配置我们的仓库,因为我们新增了一个我们自己的私有Maven库,这个使用要告诉Gradle,不然它不知道这个私有Maven仓库的存在。


image.png


这样配置后,我们就可以在我们的依赖配置里引用刚刚发布的aar包啦


image.png


刚刚我们讲了我们可以发布快照版本,那么我们如何引用呢?因为快照版本的仓库和Release的不一样,所以我们还得要新增一个快照版本的仓库。


image.png


引用的时候时候把dependencies依赖换成如下这样即可:


image.png


这样所以解决了问题,但是会配置两个Maven库,而且他们非常相似,那么能不能用一个Maven库代替呢?答案是可以的,Nexus Maven为我们提供了一种group类型的repository,这种类型的repository可以同时集成好几个repository,把他们统一当成一个group来对外发布,比如Nexus内置的public group,就包含里release和snapshot,现在我们可以把Maven库的配置改为


image.png


这样就方便简洁多了,你可以在Nexus里配置public这个分组所管理的repository,可以增减,看你的需求,也可以新建其他group类型的repository来用,比如根据你们公司的事业部来创建不同的group给他们使用,很好的分离开了不同权限、不同业务需求的repository。


10.5 小结


有了前面几章的知识,这一章的理解简单的多,因为多项目其实就是不同项目的组合,前面我们已经针对单个项目的不同的配置,所以多项目要做的其实就是针对这些项目,采用Gradle的方式管理组合起来即可。


这一章节比较重要的新知识点就是库项目的单独发布,发布到Maven中心库,学会里这个,发布到其他如jcenter库就非常简单了,他们是类似的,你只要在jcenter注册好账号,得到发布的地址即可配置发布。



本文属自学历程, 仅供参考

详情请支持原书 Android Gradle权威指南


目录
相关文章
|
6天前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
9天前
|
存储 Java Android开发
探索安卓应用开发:构建你的第一个"Hello World"应用
【9月更文挑战第24天】在本文中,我们将踏上一段激动人心的旅程,深入安卓应用开发的奥秘。通过一个简单而经典的“Hello World”项目,我们将解锁安卓应用开发的基础概念和步骤。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供一次实操体验。从搭建开发环境到运行你的应用,每一步都清晰易懂,确保你能顺利地迈出安卓开发的第一步。让我们开始吧,探索如何将一行简单的代码转变为一个功能齐全的安卓应用!
|
2月前
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
52 10
|
5天前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
22天前
|
JavaScript 前端开发 Android开发
让Vite+Vue3项目在Android端离线打开(不需要起服务)
让Vite+Vue3项目在Android端离线打开(不需要起服务)
|
22天前
|
IDE 开发工具 Android开发
安卓与iOS开发对比:平台选择对项目成功的影响
【9月更文挑战第10天】在移动应用开发的世界中,选择正确的平台是至关重要的。本文将深入探讨安卓和iOS这两大主要移动操作系统的开发环境,通过比较它们的市场份额、开发工具、编程语言和用户群体等方面,为开发者提供一个清晰的指南。我们将分析这两个平台的优势和劣势,并讨论如何根据项目需求和目标受众来做出最佳选择。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解每个平台的特性,并指导你做出明智的决策。
|
23天前
|
开发框架 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的指南
在移动应用开发的广阔天地中,安卓与iOS两大平台各占半壁江山。本文将深入浅出地对比这两大操作系统的开发环境、工具和用户体验设计,揭示它们在编程语言、开发工具以及市场定位上的根本差异。我们将从开发者的视角出发,逐步剖析如何根据项目需求和目标受众选择适合的平台,同时探讨跨平台开发框架的利与弊,为那些立志于打造下一个热门应用的开发者提供一份实用的指南。
47 5
|
25天前
|
Java 开发工具 Android开发
安卓与iOS开发:平台选择对项目成功的影响
在移动应用开发的浩瀚宇宙中,安卓和iOS两大星系璀璨夺目,各自拥有独特的光芒。本文将穿梭于这两个平台之间,探讨它们在开发环境、用户群体、成本效益等方面的差异,以及这些差异如何影响一个项目的航向和终点。我们将从初学者的视角出发,逐步深入,揭示选择合适平台的重要性,以及如何根据项目需求做出明智的选择。无论你是即将启航的新手开发者,还是已经在这片星海中航行的老手,这篇文章都将为你提供有价值的导航信息。
41 2
|
1月前
|
Java 开发工具 Android开发
探索安卓与iOS开发的差异:平台选择对项目的影响
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据着重要的位置。本文旨在深入探讨这两个平台在开发过程中的主要差异,包括编程语言、开发工具、用户界面设计、性能优化以及市场分布等方面。通过对比分析,我们将揭示平台选择如何影响项目规划、执行效率和最终成果,为开发者在选择适合自己项目需求的平台时提供参考依据。
|
2月前
|
Android开发
Android Studio: 解决Gradle sync failed 错误
本文介绍了解决Android Studio中出现的Gradle同步失败错误的步骤,包括从`gradle-wrapper.properties`文件中获取Gradle的下载链接,手动下载Gradle压缩包,并替换默认下载路径中的临时文件,然后重新触发Android Studio的"Try Again"来完成同步。
377 0
Android Studio: 解决Gradle sync failed 错误