Android架构师之路-组件化入门

本文介绍了Android组件化和模块化的概念,强调组件化以功能为导向,模块化以业务为导向,两者都旨在提高开发效率和代码复用。文章详细阐述了组件化开发的好处,包括减少重复工作、提高开发效率、便于业务移植等,并展示了项目搭建过程,包括创建组件、配置组件间通讯及获取上下文的方法。最后,通过代码示例说明了组件获取上下文和组件通讯的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

组件化与模块化

组件

组件指的是单一的功能组件,如视频组件(VideoSDK)、支付组件(PaySDK)、路由组件(Router)等,每个组件都能单独抽出来制作成SDK

模块

模块指的是独立的业务模块,如直播模块(LiveModule)、首页模块(HomeModule)、即时通信模块(IMModule)等。模块相对于组件来说粒度更大,模块可能包含多种不用的组件。

组件化开发的好处

(1)避免重复造轮子,可以节省开发和维护的成本。
(2)可以通过组件和模块为业务基准合理地安排人力,提高开发效率。
(3)不同的项目可以共用一个组件或模块,确保整体技术方案的统一性。
(4)为未来插件化共同用一套底层模型做准备

模块化开发的好处

(1)业务模块解耦,业务移植更加简单。
(2)多团队根据业务内容进行并行开发和测试。
(3)单个业务可以单独编译打包,加快编译速度。
(4)多个App共用模块,降低研发和维护成本。

多Module划分业务和基础功能,这个概念将作为组件化的基础。
组件化和模块化的本质思想是一样的,都是为了代码重用和业务解耦,区别在于模块化是业务导向,组件化是功能导向。组件化和模块化的划分将更好地为项目插件化开路。插件化的模块发布和正常发布有着非常大的差异,已经脱离了组件化和模块化的构建机制,插件化拥有更高效的业务解耦。

项目搭建

1.首先我们新建一个项目然后新建一个library(componentlib)和两个组件(logincomponent、minecomponent),如下图:
在这里插入图片描述
(1)app:应用层用于统筹全部组件,并输出生成App
(2)logincomponent和minecomponent作为组件来使用,包含一些简单的业务、比如登录、我的。
(3)componentlib:包含一些基础库和对基础库的封装,包含图片加载、网络加载,数据存储(正常是再抽离一层出来,作为Base层);还有作为通讯层,来进行各个组件的数据交互。

引用关系是app引用logincomponent和mincomponent,然后logincomponent和mincomponent引用componentlib;

2、项目中的配置
(1)在gradle.properties配置全局gradle环境
在这里插入图片描述
(2)app build.gradle的配置
在这里插入图片描述
在这里插入图片描述
logincomponent和minecomponent配置一样,下面是logincomponent build.gradle的配置
在这里插入图片描述
在这里插入图片描述
注意这里必须要配置两个AndroidManifest.xml,一个用于独立运行,一个用做组件
在这里插入图片描述
独立运行下的AndroidManifest如下:
在这里插入图片描述
作为组件的AndroidManifest.xml如下
在这里插入图片描述
minecomponent组件的配置一样,这里就不贴图了。

代码实现

配置完成后,我们就可以开始重头戏,撸代码。
组件化的时候我们首先要解决两个问题
1、回头看下项目结构图,由于App引用了logincomponent和minecomponent这个两个组件,而他们两个作为组件要怎么拿到App的Application这个项目唯一的全局上下文。
2、组件间如何通讯。

组件获取到上下文

对于问题1,我们可以在App层,通过反射将Application设置到两个组建中,这样组件就可以使用到App层的Application。
(1)首先在componentlib中定义接口IAppComponent:

public interface IAppComponent {
   
   
    void initializa(Application application);
}

(2)然后组件的Application继承该接口:

public class LoginApp extends Application implements IAppComponent {
   
   
    private static Application application;

    public static Application getApplicatoin(){
   
   
        return application;
    }

    //独立运行的时候,这里是入口
    @Override
    public void onCreate() {
   
   
        super.onCreate();
        initializa(this);
    }
	//这里获取到了全局的Application
    @Override
    public void initializa(Application application) {
   
   
        this.application = application;
    }
}

注意上面的onCreate()方法,作为组件的时候是不会被调用的,但是独立运行的时候onCreate就是入口了。

(3)App的Application通过反射进行组件的实例化

public class AppConfig {
   
   
    public static final String[] COMPONENTS = {
   
   
            "com.kangjj.logincomponent.LoginApp",
            "com.kangjj.manecomponent.MineApp"
    };
}
public class MainApp extends Application implements IAppComponent {
   
   
    private MainApp application;

    public MainApp getApplication() {
   
   
        return application;
    }

    @Override
    public void onCreate() {
   
   
        super
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值