一. 组件化定义:  

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

 

二.为什么要组件化?

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

 

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

     1.创建主项目:

app组件化架构 组件化 android_组件化

  2.创建组件

    就是创建项目的Module:

app组件化架构 组件化 android_组件化_02

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

implementation project(':module_user')

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

在gradle.properties下添加:

isBuildModule=false

 

5.配置组件化单独调试

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

if(isBuildModule.toBoolean()){//需要单独运行时就作为application来
plugin: 'com.android.application'
 }else{
     apply plugin: 'com.android.library'
 }

   

(2)配置AndroidManifest:

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

app组件化架构 组件化 android_xml_03

在组件项目的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

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

app组件化架构 组件化 android_xml_04

7.组件跳转

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

1.添加依赖包:

//阿里路由框架配置
 javaCompileOptions {
     annotationProcessorOptions {
         arguments = [AROUTER_MODULE_NAME: project.getName()]
     }}
implementation 'com.alibaba:arouter-api:1.4.1'
 annotationProcessor rootProject.ext.dependencies["arouter-compiler"]

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

if (isDebug()) {           //
     ARouter.openLog();     //
     ARouter.openDebug();   //
 }ARouter.init(mApplication); //

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)

 

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