以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。

[Android]如何做一个崩溃率少于千分之三噶应用app--章节列表

我建立了一个关于Android架构学习的群,里面可以进一步进行组件化学习的交流。

群号是316556016,也可以扫码进群。我在这里期待你们的加入!!!

ModuleBus地址

例子里面会有简单的演示,只要下载之后就能看到源码和调用了。

我也会封装越来越好用得功能到里面。

如果觉得有用的话,请大家给一个github的星哦


这个系列已经到了第十一课了。

那么在这里先做个过渡性的总结

我开展的这个系列的文章,其属于android的组件化开发,组件化开发有效让我们开发只关注于一个独立的功能模块,让我们代码更加有条理和统一。

介绍的是组件化开发的一些特殊技巧,一些关于跨module通信,多渠道开发等,而第九节写是是组件化转化插件化的过程,其具体介绍可以查看第九节Small插件化和Small源码分析系列文章。


这一节我要介绍的是关于gradle对于module组件化的一个开发体会,谨遵参考。

组件开发中设计到多个模块的统一性,我们每一个module都需要统一需要安装的module参数,我们可以抽离到一个common_config.gradle里面

1.新建一个common_config.gradle

2.里面写一些我们基本的开发参数,全部都是自定义的

3.引入到每个module的build.gradle里面,这里提供两种的连接代码

4.然后就可以引用我们的参数到全部的module里面了

*第八节的文章有介绍如果将gradle和AndroidMainfest,Android代码间交互,有兴趣可以翻一翻那个资料。

参数统一的意义在于

1.我只要在根目录的地方就可以调节我整个项目的参数。

2.如果不小心引入不同版本的apk,你最后会发现你的apk容量会不知不觉地增大啦。然后你想着如果优化。其实你引入了多个不同版本的sdk,最后时候引用会增加sdk,所以容量会增大很多的。

这小小的修改,无疑对我们组件化开发是巨大的助力。


下一个必备技巧

因为我们将每个功能模块最后用lib来封装,那么如果我们需要单独调试一个功能模块的话,需要如何去做呢?

我们并不想每次都全编译全部的内容,我们只需要编译我们需要的那个模块内容,并验证就可以了。

那么需要验证我们需要app进入的入口,将lib改为lib,我们如何才能lib和application的编译呢?

(1)这里通过设置isDebug的标志来配置入口

(2)通过isDebug来判断引用哪一个文件夹里面的AndroidManifest.xml

manifest.srcFile指定使用哪个地址里面的AndroidMainifest

res.scrDirs指定编译的资源的地址

exclude使用用来编译时排除编入debug文件里面的文件

*2017.2.27更新

请注意,这里mainfest.srcFile 的mainfest一定要用小写,千万不能用大写,我自己也遇到过这个问题,QQ群里讨论过。

(3)建立debug和main的文件夹AndroidManifest.xml和独有有Activity接口来特别定制出来。

(4)到达这里或许觉得完了,我们还需要移除主module对其他功能module的依赖

这里也是通过isDebug来区隔

(5)这里需要注意因为指定了resDir为debug里面,所以需要将引用的也复制一份到debug的res里面。

有人会问为何不将debug的文件夹也放到main里面,那么就可以引入mian文件夹里面,其实这样做也是可以的,但是请将debug的AndroidMainfest.xml的地址也要指定好。


*2016.12.09更新

发现只是修改common_config.gradle的isDebug属性,不会触发到其他module提示,是否有属性更改的情况,这里,需要完全clean工程里面的缓存,然后重编一次,才能替换成application的。

还有一个问题,引入的顺序最好先引入common_config.gradle,再判断。因为有可能需要会因为先后问题让读取不到isDebug的属性。


*2016.12.15更新

网上有人提到可能会出现资源冲突问题

其实只需要在每个组件的gradle加入一段代码就可以让资源前缀加入module相关的标示

加入resourcePrefix就可以了,起资源会提示一定要加入前缀,不然会报错

****2017.4.27更新******

如果你使用sourceSet来区分的时候

有使用到本身资源的时候,其实是会有引用到的,然后会发现提示资源引用不到的问题,其实解决很简单,我们可以看到我们debug的时候引用的是src/debug/res里面的资源,而没有引用到我们main里面的资源,我们只要把资源路径添加上就好了。

然后会发现如果你在创建Activity作为调试入口的时候,需要将包名路径也设置一致

不然很容易因为复制AndroidMainfest后你因为包名的问题,无法找寻到Activity。

再接下来,如果你遇到使用AppCompat的Activity,记得要设定theme为Theme.AppCompat.XXX.

******2019.3.22更新*****

发现了一个比较坑的地方,gradle3.0以后优化了一些操作。

如果想要多单独编译模块的时候,想额外做一些操作,放置工程如下,

代码编写如下

你会发现编译合成的AndroidManifest会把debug里面的文件内容也包含进来了。那么默认启动的Activity的入口就有多个了

这里解决问题的办法,是将debug的目录放到java里面,再调整加载src的文件夹路径。

代码变更如下


这一节就到这里,希望这样小小的优化,可以让大家组件化开发更加方便。

下一节,请继续期待!!!

更多相关文章

  1. macOS中配置Flutter开发环境(使用AndroidStudio开发)傻瓜版教程
  2. Android开发系列三:Android中怎么实现底部菜单栏
  3. 软件工程之四则运算开发感悟与收获
  4. 开发android应该注意的
  5. Android研究院之应用开发线程池的经典使用
  6. Android和iOS人才招聘出现拐点 低能人才泛滥
  7. Android(安卓)64bit系统中app以32bit运行
  8. 如何脱离Android源码环境编译aapt
  9. Android基于环信SDK开发IM即时聊天(一)

随机推荐

  1. Unity Android(安卓)打开相册和摄像头
  2. 自学第六十天
  3. xml文件内引用资源
  4. [置顶] android 如何自定义通知栏图标(不
  5. 高并发口罩抢购项目架构演进记录&优化经
  6. Android(安卓)Studio 入门 Hello World
  7. ContentProvider 学习之01
  8. android ImageView.getDrawingCache retu
  9. android开发环境的发展演变
  10. web页面(HTML5)实现发送短信的功能