android组件化教学视频教程,Android组件化学习

组件化是将一个庞大的工程拆分成多个模块,从而达到代码的解耦,业务分离,加速编译测试,同时解决多人开发的混乱等问题。

一:组件化和插件化有什么区别:

组件化的单位是组件(module)。

插件化的单位是apk(一个完整的应用)。

组件化实现的是解耦与加快编译, 隔离不需要关注的部分。

插件化实现的也是解耦与加快编译,同时实现热插拔也就是热更新。

组件化的灵活性在于按加载时机切换,分离出独立的业务组件,比如微信的朋友圈

插件化的灵活性在于是加载apk, 完全可以动态下载,动态更新,比组件化更灵活。

组件化能做的只是, 朋友圈已经有了,我想单独调试,维护,和别人不耦合。但是和整个项目还是有关联的。

插件化可以说朋友圈就是一个app, 我需要整合了,把它整合进微信这个大的app里面

其实从框架名称就可以看出: 组 和 插。

组本来就是一个系统,你把微信分为朋友圈,聊天, 通讯录按意义上划为独立模块,但并不是真正意义上的独立模块。

插本来就是不同的apk, 你把微信的朋友圈,聊天,通讯录单独做一个完全独立的app, 需要微信的时候插在一起,就是一个大型的app了。

插件化的加载是动态的,这点很重要,也是灵活的根源。

二:如何实现组件化

组件化需要考虑的功能:

代码解耦,如何将一个庞大的工程拆分成有机的整体

组件的单独编译调试和集成调试

ui页面跳转

数据传输,因为每个组件都会给其他组件提供服务,那么主项目和组件,组件和组件之间的数据传输

代码隔离,组件之间还是直接饮用交互的话,那么组件之间根本没有做到解耦

1:代码解耦:将庞大的工程拆分成一个个独立module组件,其中主module负责拼装其他的业务组件,形成一个完整的APP,         把每个组件都会用到的功能封装一个组件中,比如网络库,BaseActivity,颜色值,工具类等等,把这些封装成一个Library           组件,其他所以的组件都依赖这个library组件,其他的可根据具体的业务需求进行拆分,一般来说,一些独立业务模块可单独         拆分出来,比如播放视频中,播放的功能和逻辑

2:组件的单独编译和集成调试:这是组件化较核心的功能,相信大家有遇到过,若项目很大,集成了很多第三方的东西,每次         修改点代码编译测试一次就需要很长时间,这严重的降低了我们的开发效率,实现对某个模块进行单独编译很好的解决了这个问题。在工程目录下的gradle.properties中设置一个isModule=true值,然后在主项目的module的builde.gradle中的dependencies{}中去判断这个值

if (!isModule.toBoolean()) {

implementation project(':homemodule')

implementation project(':readermodule')

implementation project(':sharemodule')

}

如果是false就添加其他的业务组件的依赖,如果是true,则表明业务组件是可单独编译的,不需要添加依赖,同样在每个需要单独编译组件的build.gradle中判断这个值

if (isModule.toBoolean()) {

apply plugin: 'com.android.application'

} else {

apply plugin: 'com.android.library'

}

同时在module main下和java文件同层级中创建一个runalone文件,文件名可随便命名,在runalone下创建一个AndroidManifest.xml文件,在这个AndroidManifest.xml中添加module单独编译时的入口,然后在build.gradle中的android下设置AndroidManifest.xml

sourceSets {

main {

if (isModule.toBoolean()) {

manifest.srcFile 'src/main/runalone/AndroidManifest.xml'

} else {

manifest.srcFile 'src/main/AndroidManifest.xml'

//集成开发模式下排除debug文件夹中的所有Java文件

java {

exclude 'debug/**'

}

}

}

}

这样,只要我们改变这个isModule的值,就可以在集成编译和单独编译进行切换,改变这个值后必须要在Rebuild Project一下

3:ui跳转和数据传输:由于我们需要代码隔离,也就是每个业务组件不能依赖其他的组件,但通常开发中,不同业务组件需要进行数据交互和页面跳转,这个可以通过阿里巴巴开源的ARouter路由实现,这也是组件化过程中最重要的部分了,ARouter地址 https://github.com/alibaba/ARouter,ARouter不仅能实现页面跳转,数据传输,还能获取Fragment的实例,和拦截器的功能,具体不了解的可看这个文档 https://www.jianshu.com/p/6021f3f61fa6。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值