需求:把3个功能独立的app整合成一个app
背景:公司的老app有3个,都是针对同一个系统的各个模块,客户嫌每次要用3个app太麻烦,需要合成1个app
架构分析:app为主入口,其他老的app抽成独立的模块,把老app的用户
功能抽出来作为一个独立模块,架构如下:
app:主入口
老app1:模块1
老app2:模块2
老app3:模块3
用户模块:模块4
1、把老app当成模块导入新项目
模块1 build.gradle下application改为library,代码如下
//apply plugin: 'com.android.application'
apply plugin: 'com.android.library'
app模块导入该模块1 ,app 的build.gradle下dependencies依赖模块1,代码如下
dependencies {
implementation project(':模块1 ')
...
}
理论上,app模块就可以使用模块1里的功能了,其他模块导入同模块1
2、处理各种异常
1、 ARoute模块之间跳转
模块之间不像同一个app可以直接使用startActivity跳转,需要使用路由来跳转,这里我使用的是阿里巴巴的ARoute
写下我遇到ARoute的一些问题处理方法
- ARoute 必须先在Application初始化
- ARoute 的path必须是2级目录/xx/xx
- ARoute 不同模块path一级目录不能相同
2、ButterKnife无法在模块中使用
环境:Android studio 版本:4.0.1 gradle plugin:3.5.0
之前的ButterKnife是8.8.1,而我的gradle要求最低版本是9.0.0所以只能升级了
大坑:
-8.4.0之前(包含8.4.0):不支持在library类型的module中使用
-8.4.0之后(不包含8.4.0):支持在library类型的module中使用
-10.0.0之后(包含10.0.0),需要将项目迁移到AndroidX
我的项目都是v4,v7库,所以同事不同意升级androidx,只好找个折中的版本,9.0.0这个版本刚好可以适应我的环境。下面配置
1.根目录下build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'// plugin 注意版本
classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0'//必须
}
}
2.模块1下build.gradle,其他模块相同
apply plugin: 'com.jakewharton.butterknife'
...
dependencies {
api 'com.jakewharton:butterknife:9.9.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0'
...
}
3.处理R文件问题
@BindView(R.id.form_add_commit)
TextView tvAdd;
改为
@BindView(R2.id.form_add_commit)
TextView tvAdd;
感谢:butterKnife在多模块中的配置应用https://blog.csdn.net/FDoubleman/article/details/107062439?utm_medium=distribute.pc_relevant.none-task-blog-title-1&spm=1001.2101.3001.4242