Android组件化:adle配置
之前已经整体的对组件化框架进⾏了概述:Android组件化开发框架,这篇⽂章只针对组件化的编译脚本的配置进⾏详述。
我们先回顾⼀下组件化的⽬标,可复⽤、热插拔、灵活发布。那么要达到这些个⽬标,显然不只是代码层就能完成的⼯作。其中灵活发布就是我们这⼀篇需要重点研究的内容。
如何才能算是可灵活发布呢?
1. 组件可以独⽴运⾏
2. 组件可以独⽴发布
3. 组件有独⽴的版本
编程好学吗什么叫编程android 的gradle配置中有2种Module,library、application。其中library是发布为aar的⼦Module,application是可以运⾏打包为apk的主Module,如果我们希望组件能独⽴运⾏,则组件必须是application,但是application发布后是apk⽂件,apk是不能被其它Module所引⽤的。
为了解决上述问题,我们需要Module同时具有application以及library的特性。所以,最理想的⽅式是直接这样添加:
同时设置application和library
可惜这样是不⾏的,编译时会出现如下错误:
properties是什么文件>label控件的功能同时设置时的编译错误
也就是说application与library都有android这个结构,是冲突的,不能同时存在,于是我们⽴马想到改成这样:
使⽤if语句进⾏区分计算机短期速成班
很棒~!因为编译通过了,⽽且只需要修改isApp的值就能动态修改Module的类型。但是如果每个Module都是这样简单的设置就可以的话,那也就不会有这篇⽂章了。
想⼀想,还有什么没考虑到的呢?
配置好上⾯的代码后,还需要修改Module的⽬录结构,修改后如下:
image.png
这⾥是利⽤了gradle的sourceSets⽅案,每⼀个flavor都会匹配⼀个对应的sourceSet,每个sourceSet都有⾃⼰的源码⽂件夹。⽂件夹说明:/src/main : 核⼼源码默认⽂件夹
/src/run : 在切换module为可运⾏模式时的扩展源码⽂件夹
/src/androidTestRun、/src/testRun :扩展的测试代码⽂件夹
需要特别注意的地⽅
1. main⽂件夹中的class不能引⽤run中的class,因为run⽂件夹中的class在作为library发布的时候是⾮源码⽂件夹,不参与编译,如果引⽤了
⾥⾯的代码编译时会报错。⽽run⽂件夹的类可以随意引⽤java中的类。main⽂件夹与run⽂件夹不能出现重复的类。
2. main⽂件夹中不能引⽤run⽂件夹中的资源,原因同上,并且不能出现重复的资源。
3. l和l中的配置信息在可执⾏模式时编译器会合并两个⽂件。所以
l中配置可运⾏时需要的额外内容即可。
最后我们在run/java中添加我们的测试⼊⼝类TestActivity.java,在run/res中添加测试layout⽂件l,在
l中设置TestActivity为Main⼊⼝。
将isApp设置为true,我们就能直接运⾏我们的Module。
将isApp设置为false,就能将Module发布成aar。
进阶优化
到这⾥其实已经能完成我们的前3个⽬的,只需要修改⼀个配置,就能随意更改Module的类型,但是如果Module有很多个的时候,想同时修改⼏个,就得修改好⼏个adle⽂件,⽽且,每改⼀次adle⽂件就需要全部重新build⼀次,这样有点浪费时间。
那我们能不能修改配置之后不需要重新build就能修改Module的类型呢?
答案是可以。
第⼀步:在⼯程的根⽬录(与adle⽂件同级)新建include.properties⽂件,然后添加如下内容:
解决这个问题之前,先思考⼀下为什么需要版本管理?
为了存档,为了热修复的时候可以不⽤全部重新发布Module
我们使⽤常规的compile project('...')的⽅式引⼊Module时是⽆法进⾏版本管理的。版本只对已发布到maven仓库的library才有效。
那难道我们要把组件都发布成maven吗?是的。
伦勃朗光效人像那难道我们要把组件都发布到远处仓库吗?不是的。
我们可以把组件发布到本地仓库,甚⾄于Project⽂件夹⽬录的本地仓库。下⾯是发布到Project⽂件夹的⽅案解析。
svg无功补偿间配电盘安装位置
⾸先:我们在⼯程根⽬录的adle中添加如下代码:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。