以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。
[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.
这一节就到这里,希望这样小小的优化,可以让大家组件化开发更加方便。
下一节,请继续期待!!!
网友评论