关于实现Android下的组件化方案

  最近公司研究将现有项目进行组件化的拆分,其实个人对于组件化并没有什么较为深刻的概念,在网上查阅一番资料后,进行如下总结。

1.引入com.luojilab.ddcomponent插件

  引入com.luojilab.ddcomponent插件,来达到在编译时将需要依赖的库以library的形式依赖到主项目中的目的。先看该怎么引入。

1.1 在当前工程的build.gradle中,添加如下代码

 dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        //这一行是导入com.luojilab.ddcomponent插件的
        classpath 'com.luojilab.ddcomponent:build-gradle:1.1.0
    }

1.2 在作为模块的项目中使用上一步过程中引入的插件

在当前项目所有的模块中,使用上一步引入的插件,即在每一个module的build.gradle文件中,将原来的com.android.library或者是com.android.application统一的替换为apply plugin: ‘com.dd.comgradle’。(当然,在这一步中,那些恒为library的module,不需要进行替换。)替换成这个的目的我觉得主要有两个:1.在编码阶段,项目之间是没有一个互相依赖的关系的,所以就很好的做到了代码的隔离,能够保证代码的耦合程度较低。2.使用此插件的module,可以在未来的某个时期,通过一定的设置来以一个单独的应用来运行,这在开发一个大型的项目中,单独运行某个模块进行调试,会对工作效率有很大的提升。

1.3 在当前工程的gradle.properties文件中,添加如下配置

mainmodulename = app

这里添加的是主项目的名称,一般来说是叫做app。

1.4 在主module的gradle.properties文件中,声明在编译时,需要一起打包的module的名称

在主module的gradle.properties文件中,添加如下配置。以下所列出module1,module2,module3,意味着在编译时,将他们和主项目一起打包。

debugComponent=module1,module2,module3
compileComponent=module1,module2,module3

1.5 在各个module的gradle.properties文件中,添加isRunAlone的配置

在引入com.luojilab.ddcomponent插件的所有module中,找到gradle.properties文件,如果没有,则新建一个。在上述文件中添加 isRunAlone=true 的配置。

1.6 在替换插件之前为library的module中,新建runalone相关的文件

例如:在module1中的src/main目录下,新建一个runalone文件夹,在runalone文件夹下新建一个AndroidManifest.xml文件,同时在runalone文件夹下新建java文件夹,在java文件夹下新建application文件夹,在application文件夹中新建一个java类,并让此类继承自Application。

public class Module1Application extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
       }
}

1.7 在上一步新建的AndroidManifest.xml文件中,添加如下代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    //包名按照你自己的来
    package="com.wxg.module1">

    <application
        //这里引用你刚刚创建的Application
        android:name="application.Module1Application"
        android:allowBackup="true"
        android:label="Module1"
        android:supportsRtl="true"
        tools:replace="android:label">


    </application>

</manifest>

1.8 在每一个新建runalone相关文件的module的build.gradle文件中,添加combuild配置,如下所示

combuild {
    //Module中,自己声明的Application的名称
    applicationName = 'application.Module1Application'
    isRegisterCompoAuto = false
}

   至此,基本上动态配置依赖库的设置都配置完了(可能会有遗漏),可以尝试着跑一下项目,看看是否可以正常运行,包括分别跑主项目app,以及子项目module1等等,可能会有一些问题,可以根据androidstudio的提示进行修改。
  

2. 下面开始介绍ARouter的引入,来进行模块间服务的调用

2.1 引入ARouter框架

一般在我们的project下,每个人都会定义一个baselib的基础类库(这就是之前说过的,恒为library的module),一些公共的类我们放到这里面,然后在project的各个项目中进行引用。我们在baselib下的build.gradle文件中,添加如下配置。

dependencies {
    //把V7包放到这里引入,在依赖baselib的module中就不需要重复引入了
    compile 'com.android.support:appcompat-v7:26.+'
    //引入ARouter框架
    compile 'com.alibaba:arouter-api:1.3.0'
    }

2.2 在需要使用ARouter的module下的build.gradle文件中,添加如下配置:

    android{
        ....
        defaultConfig{
        ....        
        //这里不加的话,编译时会报错
         javaCompileOptions {
            annotationProcessorOptions {
                arguments = [moduleName: project.getName()]
            }
        }
        }
    }

    dependencies {
    ...
    //这里引入编译ARouter的工具(每个需要使用ARouter注册的module需要单独声明,否则会报找不到的错误)
    annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
    }

2.3 关于ARouter的使用

这里就不多做介绍了,还是参照官方的文档吧。

总结

基本的配置到这里就结束了,顺利的话项目应该能够跑起来。关于ARouter的一些具体使用,可以参见官方文档,或者一些其他专门介绍ARouter使用的文章,这里不再多做介绍。由于作者水平有限,有错误的地方还请多包涵。同时,有遇到的问题也希望朋友们留言一起讨论。下面列出个人参考的一些文章,并对作者表示感谢。

Android彻底组件化实践方案系列文章
ARouter github地址
当前demo源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值