2020-09-15 项目组件化/模块化问题记录

需求:把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

你可能感兴趣的:(2020-09-15 项目组件化/模块化问题记录)