Android组件化流程

一、组件化的好处

1、架构清晰业务组件间完成接耦合。
2、每个业务组件都可以根据BU需求完成独立app发布。
3、开发中使开发者更加轻松,开发中加快功能开发调试的速度。
4、业务组件整体删除添加替换变得非常轻松,减少工程中的代码资源等冗余文件。
5、业务降级,业务组件在促销高峰期间可以业务为单元关闭,保证核心业务组件的顺利执行。
 

二、基础搭建

1.框架思路

 2.项目结构图

 

三、组件化过程

1.分别创建app、common、module_main、module_market四个子工程

2.明确分工

壳app:app

公共的library:common

业务子组件:module_main和module_market

3.组件模式和集成模式设置: isModule

(1).我们在大工程的gradle.properties中定义一个常量值 isModule(是否是组件开发模式,true为是组件模式,false为集成模式):

(2).common模块作为library,build.gradle中设置libary

 (3).在module_main和module_market的build.gradle文件下区分组件模式和集成模式


if(isModule.toBoolean()){//组件模式:app
    apply plugin: 'com.android.application'
}else {//集成模式:libary
    apply plugin: 'com.android.library'
}

(4).效果如下:

 

4.组件模式和集成模式下的AndroidManifest读取问题

(1).

组件模式下:在main目录下新建一个文件夹module,创建AndroidManifest.xml;

集成模式下:默认的AndroidManifest.xml位置,

(2).module_main和module_market在组件模式和集成模式下的AndroidManifest.xml区别

 

 common的AndroidManifest.xml内容如下

 (3).在各自的build.gradle文件区分加载组件和集成模式下的AndroidManifest.xml文件;

 (4).组件模式下,作为独立的app才设置appid

5.依赖关系

app依赖common;

集成模式下,app依赖module_main和module_market;

module_main和module_market依赖common;

app的build.gradle

module_main的build.gradle

 module_market的build.gradle

 

6.全局Context的获取

BaseApplication 主要用于各个业务组件和app壳工程中声明的 Application 类继承用的,只要各个业务组件和app壳工程中声明的Application类继承了 BaseApplication,当应用启动时 BaseApplication 就会被动实例化,这样从 BaseApplication 获取的 Context 就会生效,也就从根本上解决了我们不能直接从各个组件获取全局 Context 的问题;

做法:

组件模式下,每个Application 继承BaseApplication ,这样即使在组件模式下,也可以通过BaseApplication.getApplication()得到全局的context;

集成模式下,全局的MainApplication继承BaseApplication,也可以通过BaseApplication.getApplication()得到全局的context;

这样无论是组件模式下, 还是继承模式下,都可以通过BaseApplication.getApplication()得到全局的context;

public class BaseApplication extends Application {
    //全局唯一的context
    private static BaseApplication application;

    @Override
    public void onCreate() {
        super.onCreate();
        application = this;
        ARouter.init(BaseApplication.getApplication());


    }
    public static BaseApplication getApplication() {
        return application;
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        ARouter.getInstance().destroy();

    }

}

7.[踩坑]在项目的gradle.properties中配置

android.useAndroidX=true
android.enableJetifier=true

使应用对support库的依赖自动转换为androidx的依赖;

 

8.组件之间通信:ARouter框架(阿里)

1.框架的依赖

(1).在每个模块下的build.gradle中defaultConfig下添加

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [moduleName: project.getName()]
            }
        }

(2).在build.gradle的dependencies中添加

implementation 'com.alibaba:arouter-api:1.3.1'
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'

 2.初始化ARouter

 LogUtils代码

public class LogUtils {
    public static boolean isDebug() {
        boolean debuggable = false;
        PackageManager pm = BaseApplication.getApplication().getPackageManager();
        try{
            ApplicationInfo appinfo = pm.getApplicationInfo(BaseApplication.getApplication().getPackageName(), 0);
            debuggable = (0 != (appinfo.flags & ApplicationInfo.FLAG_DEBUGGABLE));
        }catch(PackageManager.NameNotFoundException e){

        }
        return debuggable;
    }
}

3.Activity的路径标记

module_main的OneActivity的路径标记/main/OneActivity

module_market的TwoActivity的路径标记/market/TwoActivity

注意:不同的模块下,第一个标记不能相同,否则报异常(隔离标记)

 

四、演示

1.集成模式

2.组件模式

壳app

 module_main 

 module_market

 

好了,到此,组件化项目就完成了

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值