最近公司研究将现有项目进行组件化的拆分,其实个人对于组件化并没有什么较为深刻的概念,在网上查阅一番资料后,进行如下总结。
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使用的文章,这里不再多做介绍。由于作者水平有限,有错误的地方还请多包涵。同时,有遇到的问题也希望朋友们留言一起讨论。下面列出个人参考的一些文章,并对作者表示感谢。