Android---组件化

news2024/11/18 0:26:02

1、单体应用

所有代码写在一个工程里。不同业务写到各自模块,以包名来区分。
在这里插入图片描述
弊端
1、无论包名做的再好,随着项目扩大,项目失去层次感,接受吃力。

2、报名作为约束,太弱了。一不注意就会出现不同业务之间之间相互调用,代码高度耦合

3、多人联合开发在代码管理中很容易出现冲突和代码覆盖问题。

2、组件化

在这里插入图片描述
业务组件层各个组件不再出现横向的、直接的依赖关系,可以分别单独编译成一个APK安装包,进行安装、测试,也可以合并编译成一个完成的APK包。

2.1、为什么使用组件化

组件化基于可重用的目的,将应用拆分成多个独立组件,以减少耦合。
1.)通过关注点分离的形式,将App分离成多个模块,每个模块都是一个组件。解决了各种业务代码耦合在一起所导致的问题。
2.)开发的过程中,让这些组件被其它组件依赖,但是在调试时也可以单独成为独立的工程并且运行,这样就解决了因为编译耗时过多降低开发效率的问题。
3.)多人开发中,每个组件模块由单人负责,降低了开发之间沟通的成本,减少因代码风格不一致而产生的相互影响。

2.2、什么是组件化

1.)组件(Component),是对数据和方法的简单封装,功能单一,高内聚,并且是业务能划分的最小粒度。
2.)组件化是基于可重用的目的,将大型的软件系统按照分离关注点的形式,拆分成多个独立的组件,使得整个软件系统也做到电路板一样,是单个或多个组件元件组装起来,哪个组件坏了,整个系统可继续运行,而不出现崩溃或不正常现象,做到更少的耦合和更好的内聚。

2.3、区分模块化与组件化

1.)模块化是将一个程序按照其功能做拆分,成为相互独立的模块,以便于每个模块只包含与其功能相关的内容,模块我们相对熟悉,比如登录功能可以是一个模块,搜索功能可以是一个模块等等。
2.)组件化是模块化思想的一种演进,它们二者本质都是一致的。
组件化更注重关注点分离,所谓的关注点分离,就是把复杂的问题做到合理分解,再分别仔细研究这些问题的不同侧面(关注点),最后综合得到整体解决方案。
如果从集合角度来看的话,可以说往往一个模块包含了一个或多个组件,或者说模块是一个容器,由组件组装而成。简单来说,组件化相比模块化粒度更小。

2.4、区分组件化与插件化

1.)插件化也是基于模块化的思想,将应用拆分成多个模块,而这些模块都是一个APK,最终打包时将宿主APK和插件APK分开打包。在运行程序时,宿主APK可以动态的选择并加载想要的插件APK。
2.)插件化与组件化存在很多相似之处,但是它们根本的区别在于:
组件化的模块虽然在调试的时候可以切换到application独立运行,但是最终在打包时,每个模块始终都只是一个library,整个应用只有单独的一个APK。
插件化是拆分出了多个APK,并且在运行时通过动态加载的技术方案,来加载这些插件APK。

2.5、组件化要考虑的问题

分而治之,并行开发,一切皆组件。要实现组件化,无论采用什么样的技术方式,都需要考虑以下几个方面的问题:
1.)组件分层:如何将一个庞大的项目工程分成有机的整体?
2.)组件单独运行和集成调试:每个组件都是高度内聚的,是一个完整的整体,如何让其单独运行和调试?在开发解读如何做到按需编译组件?
3.)组件间通信:每个组件具体实现细讲都互相不了解,但每个组件都需要给其他调用方法提供服务,那么主项目与组件、组件与组件之间如何通信就变成关键?
4.)组件生命周期:这里的生命周期指的是组件在应用中存在的时间,组件是否可以做到按需、动态使用,因此就会涉及到组件加载、卸载等管理问题。

2.6、组件分层

组件大致分层如下:主工程、业务组件层、功能组件层、基础组件层。
在这里插入图片描述

3、demo

根据组件的分层来创建module。

3.1、创建module

1.)创建一个项目名为Component(名字随意),作为我们的主工程,是整个应用的主入口。对项目做一些初始化和配置都是在主工程里。

2.)创建第2个业务组件,一个main,一个login。File–>New–>New Module --> Phone & Tablet。业务组件都选择Phone & Tablet,这样后面就可以进行单独的运行和调试。

为了让分层更明显,在Module name栏中加一个moduleCore,后面创建的所有业务组件都放到moduleCore文件夹下面。在Package name栏加一个module,避免命名冲突的一些问题。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.)创建基础组件。File --> New --> New Module --> Android Library。
在Module name栏中加一个moduleBase,创建的基础组件都放在该文件夹下。同样在Package name栏加上一个module避免命名冲突。
在这里插入图片描述
4.)创建功能组件,File --> New --> New Module --> Android Library。
在这里插入图片描述
最后,创建的结果如下
在这里插入图片描述

3.2、管理组件分层中业务组件、基础组件之间的依赖关系

对依赖做一个统一的管理,避免因版本不一致而产生的依赖冲突。这么多的module,它可能去依赖各种第三方库、SDK。因此,这里先做一个版本的管理。

1.)在project下的build.gradle里创建一个ext{},里面添加如下内容。

isDebug = false //当它为true时,是调试模式,组件可以单独运行(applicaton);当它为false,是正式的编译打包的模式(library). 作业:使得业务组件可以在application和library之间进行切换

    android = [
            compileSdkVersion: 32,
            minSdkVersion: 21,
            targetSdkVersion: 32,
            buildToolsVersion: "30.0.2",
            versionCode: 1,
            versionName: "1.0"
    ]

    applicationId = [ // 可以切换到application
            "app" : "com.example.component",
            "main" : "com.example.module.main",
            "login" : "com.example.module.login"
    ]
// SDK的一下library
    library = [
            "appcompat" : "androidx.appcompat:appcompat:1.3.0",
            "material" : "com.google.android.material:material:1.4.0",
            "constraintlayout" : "androidx.constraintlayout:constraintlayout:2.0.4"
    ]
//第三方的library
    libARouter = "com.alibaba:arouter-api:1.5.1"
    libARouterCompiler = "com.alibaba:arouter-compiler:1.5.1"
    libGson = "com.google.code.gson:gson:2.8.6"

2.)修改 main业务组件 里的build.gradle文件(login是一样的)。
在这里插入图片描述
在这里插入图片描述
当main/login是一个applicaton (isDubug==true时, 可以单独运行)时,对AndroidManifest.xml文件也要进行修改。
首先,在mian下面创建一个debug文件夹,然后拷贝一份AndroidManifest.xml 到里面,如下
在这里插入图片描述
其次,将main下面的AndroidManifest.xml 做如下修改(注意:不是修改debug下的那个AndroidManifest.xml)
在这里插入图片描述
最后,再修改build.gradle(main/login),对当前的业务组件是application还是library进行判断,然后动态的选择两个AndroidManifest.xml
在这里插入图片描述

3.)修改 libBase基础组件 里的build.gradle文件
在这里插入图片描述
在这里插入图片描述

4.)修改 modulePay功能组件 里的build.gradle文件。
在这里插入图片描述
在这里插入图片描述

5.)修改**主工程(app)**里的build.gradle文件。
在这里插入图片描述
在这里插入图片描述
到这里,组件化创建工程就以完成。
当把project下的build.gradle里的ext里的isdebug改成true时,就可以单独运行moduleCore.man/moduleCore.login。
在这里插入图片描述

3.3、业务组件间通信和参数传递

使用 组件路由,待续…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/96358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法数据结构专题】「限流算法专项」带你认识常用的限流算法的技术指南(分析篇)

限流 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理 限流一词常用于计算机网络之中,定义如下: In computer networks, rate l…

接口测试(七)—— 参数化、数据库操作类封、接口自动化框架

目录 一、接口自动化测试框架 1、目录结构 二、封装iHRM登录 1、普通方式实现 2、登录接口对象层 3、登录接口测试用例层 4、封装断言方法 三、参数化 1、回顾UnitTest参数化 1.1 原始案例 1.2 参数化实现 1.3 从json文件读取 2、登录接口参数化 2.1 组织数据文…

java8流操作之不常用但是很好用的隐藏api

前言 1、一些普通的方式就不再多说了,这里主要说一些不常用的,但是作用很大的api方式 2、如果想要细致了解可以参考 JAVA8的流操作,十分推荐 一、flatMap 1、这个api主要是用来推平流的,和map不一致,map是对象到对…

Python基础(十六):函数的初步认识

文章目录 函数的初步认识 一、函数的作用 二、函数的使用步骤 1、定义函数 2、调用函数 3、快速体验 三、函数的参数作用 四、函数的返回值作用 1、应用 五、函数的说明文档 1、语法 2、快速体验 3、函数嵌套调用 七、函数应用 1、打印图形 2、函数计算 八、总…

还在为多张Excel汇总统计发愁?Python 秒处理真香!

为什么越来越多的非程序员白领都开始学习 Python ?他们可能并不是想要学习 Python 去爬取一些网站从而获得酷酷的成就感,而是工作中遇到好多数据分析处理的问题,用 Python 就可以简单高效地解决。本文就通过一个实际的例子来给大家展示一下 P…

新手传奇gm架设要学会的几个修改技巧

每个传奇gm对于架设一个服务器都有自己独立的看法和想法,一些人之所以会想着要架设一个传奇私服主要原因是自己在其他人的服力玩得不是那么舒心。所以想要按照自己的想法和思路打造一个适合自己的专属服务器进行游戏,其实这两者之间是有必然联系的&#…

毕业三年活得像个废物,转行网络安全,写给像我一样迷茫的人...

首先说说我吧,普通二本非科班商贸专业毕业,三年了,做过电商,做过新媒体,做过业务员,从躺平到摆烂,一开始还挺享受这样的生活的,毕竟每月4千工资,抛出吃住,剩个…

重学webpack系列(八) -- webpack的运行机制与工作原理

前面几个章节我们分别去探索了webpack的loader机制、plugin机制、devServer、sourceMap、HMR,但是你是否知道这些配置项是怎么去跟webpack本身执行机制挂钩的呢?这一章我们就来探索一下webpack的运行机制与工作原理吧。 webpack核心工作过程 我们打开w…

第十四章 文件操作

1.文件的基本操作 文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的Word文档,TXT文件,excel文件…都是文件。文件最主要的作用就是保存数据,它既可以保…

用户虚拟地址空间管理-mm_struct

一、进程虚拟地址空间管理概览 二、mm_struct结构体的主要成员 atomic_t mm_users;共享同一个用户虚拟地址空间的进程的数量,也就是线程组包含的进程的数量atomic_t mm_count;内存描述符的引用计数struct vm_area_struct *mmap;虚拟内存区域链表struct rb_root mm_…

【java】课程设计--抽卡模拟器

文章目录工期安排自己实现菜单逻辑抽卡算法0.书写要求1.用户需求2.设计思想3.各个功能和算法描述4.系统调试中问题5.总结新知识怎么打开任务管理器改进(进一步的设想)交给她们实现1.注册登录2.读文件-显示查找内容暂时成功案例工期安排 1 自定义增加和删…

数据权限就该这么设计

在项目实际开发中我们不光要控制一个用户能访问哪些资源,还需要控制用户只能访问资源中的某部分数据。 控制一个用户能访问哪些资源我们有很成熟的权限管理模型即RBAC,但是控制用户只能访问某部分资源(即我们常说的数据权限)使用…

[附源码]Python计算机毕业设计红旗家具城管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

✿✿✿JavaScript --- 事件

目录 1.事件相关概念 2. js中注册监听(事件绑定)的方式 (1)在定义标签时,添加事件名称属性。属性值是js代码(js代码会被自动封装到一个function函数的方法体中) (2)通过js获取元素对象,再添加事件。 补…

ADI Blackfin DSP处理器-BF533的开发详解54:CVBS输出-DSP和CH7024的应用详解(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 CVBS OUT 视频输出 硬件实现原理 CVBS_OUT 子卡板连接在 ADSP-EDU-BF53x 开发板的扩展端口 PORT3 和 PORT4 上,板卡插入时&#xff0…

window10 下Tomcat安装步骤

目录先安装JDK根据JDK选择tomcat版本下载安装设置系统变量运行测试先安装JDK 略过 根据JDK选择tomcat版本 打开CMD窗口,运行java -version查看本机JDK版本 C:\Users\admin>java -version java version "11.0.17" 2022-10-18 LTS Java(TM) SE Runtime E…

python函数讲解进阶

关于python函数的基本知识可以点击“python函数讲解” 目录 一.函数多返回值 思考 二.函数参数种类 1.位置参数 2.关键字参数 3.缺省参数 4.不定长参数 位置传递 关键字传递 总结 三.匿名函数 函数作为参数传递 lambda匿名函数 一.函数多返回值 思考 运行之后&…

Python抓取电商平台数据 / 采集商品评论 / 可视化展示 词云图...

前言 大家早好、午好、晚好吖 ❤ ~ 我给大家准备了一些资料,包括: 2022最新Python视频教程、Python电子书10个G (涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题)、Python学习路线图等等 直接在文末名片自取即可&#x…

[附源码]Node.js计算机毕业设计公交电子站牌管理系统软件Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

多模态在医疗中的应用

多模态是把要检索的模态融合起来,做整体的检索,查询和检索的必须至少有一个模态是相同的,也就是要查询和检索的模态都已经在融合模态里了。 跨模态是检索结果和查询的模态是不同,如图像检索文本,视频和音频。跨模态检索…