Android组件化初探

一. 组件化定义:  

     组件化就是一个项目根据业务功能划分成不同的业务模块,每个模块都相当于一个单独的app可以单独编译和运行,模块之间通过路由交互。

 

二.为什么要组件化?

       对于一个大型app来说,版本会不断迭代,功能会不断增加,业务也会越来越复杂,每个业务模块的代码不断增加,这样发展下去,项目的维护和开发人员会都要熟悉整个项目的代码,每次编译都要编译整个项目,严重影响开发效率,也很不利于多人协同开发,所以需要一个灵活的架构来替换单一的工程。使用组件化架构可以把每一个业务模块作为一个组件,每一个组件都可以拆分出来独立运行。

 

三.使用阿里的ARouter路由来实现组件化:

     1.创建主项目:

  2.创建组件

    就是创建项目的Module:

3.在主项目中依赖组件:

implementation project(':module_user')

4.设置是否单独编译组件开关:

在gradle.properties下添加:

isBuildModule=false

 

5.配置组件化单独调试

 (1)在组件项目的build.gradle中配置:

if(isBuildModule.toBoolean()){//需要单独运行时就作为application来

    apply plugin'com.android.application'
}else{
    apply plugin'com.android.library'
}

   

(2)配置AndroidManifest:

  添加一个需要单独运行的AndroidManifest

在组件项目的build.gradle中配置:

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
        if (isBuildModule.toBoolean()) {
            //独立运行
            manifest.srcFile 'src/main/alone/AndroidManifest.xml'
        } else {
            //合并到宿主
            manifest.srcFile 'src/main/AndroidManifest.xml'
        }
    }

}

在主项目的build.gradle中配置依赖组件:

if (!isBuildModule.toBoolean()){//组件不单独运行时才加载组件
    implementation project(':module_user')

}

 

这时候我们打开单独运行组件的开关:

isBuildModule=true

运行时看到,组件项目就可以单独运行了:

7.组件跳转

 这里我们使用阿里的ARouter作为跳转路由

1.添加依赖包:

//阿里路由框架配置
javaCompileOptions {
    annotationProcessorOptions {
        arguments = [AROUTER_MODULE_NAMEproject.getName()]
    }

}

implementation 'com.alibaba:arouter-api:1.4.1'
annotationProcessor rootProject.ext.dependencies["arouter-compiler"]

 

2.在根application中添加初始化:

if (isDebug()) {           // 这两行必须写在init之前,否则这些配置在init过程中将无效
    ARouter.openLog();     // 打印日志
    ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
}

ARouter.init(mApplication); // 尽可能早,推荐在Application中初始化

3.在需要被跳转的activity中添加注解:

@Route(path "/us/user")

public class UserActivity extends AppCompatActivity {

(注意,该activity需要在AndroidManifest中申明:<activity android:name=".UserActivity"></activity>)

4.简单的页面跳转:

ARouter.getInstance().build("/us/user").navigation();

(注意运行之前需要把isBuildModule设置成false,把module依赖到主项目中,否则会报错:ARouter::There is no route match the path)

 

组件化的简单使用就到这了,实际项目使用中还需要根据项目需求分组件,还要用到数据传递、数据监听等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值