社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
理由很简单, 提高团队开发速度.特别是业务模块繁琐的项目,主要体现在一下几点
上图是常见的普通项目的架构,主工程依赖各业务模块, 各业务模块都依赖相同的支持库,例如日志库,工具类库等,当A业务改一行代码, 编译看效果时,要都编译,这样效率相当慢. 当然有人会选择单元测试,当然为了一行代码单独写个单元测试有点没必要,如果还设计其他模块可能会更复杂 如下图
上图单一工程模型下的业务关系,总的来说就是:你中有我,我中有你,相互依赖,无法分离。
然而随着产品的迭代,业务越来越复杂,随之带来的是项目结构复杂度的极度增加,此时我们会面临如下几个问题:
1、实际业务变化非常快,但是单一工程的业务模块耦合度太高,牵一发而动全身;
2、对工程所做的任何修改都必须要编译整个工程;
3、功能测试和系统测试每次都要进行;
4、团队协同开发存在较多的冲突.不得不花费更多的时间去沟通和协调,并且在开发过程中,任何一位成员没办法专注于自己的功能点,影响开发效率;
5、不能灵活的对业务模块进行配置和组装;
为了满足各个业务模块的迭代而彼此不受影响,更好的解决上面这种让人头疼的依赖关系,就需要整改App的架构。
业务组件之间是相互独立的,但是又都被APP壳工程依赖,这样app壳工程可以调用组件,当时有个问题,组件之间怎么通信呢??? 这个问题就要交给路由协议了,(例如: ActivityRouter, ARouter)
很详细我就不介绍了 文末参考文章都写的很详细,直接撸代码
2.在项目的根目录中生成一个文件 gradle.properties加入 一个变量isModule
# 每次更改“isModule”的值后,需要点击 "Sync Project" 按钮
# true 是组件模块,说明是单独的App
# false 是集成模式,说明是依赖Lib
isModule=false
if (isModule.toBoolean()) {
apply plugin: com.android.application
} else {
apply plugin: com.android.library
}
if (isModule.toBoolean()) {
// 可以写一下基类库
} else {
implementation project(path: ':module_main')
implementation project(path: ':module_keepAlive')
}
<?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.zhf.keepalive">
<application
android:name=".debug.App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
</application>
</manifest>
8. 在组件的build.gradle 文件的 android 标签里填加如下判断代码
sourceSets {
main {
if (isModule.toBoolean()) {
manifest.srcFile 'src/main/module/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
//集成开发模式下排除debug文件夹中的所有Java文件
java {
exclude 'debug/**'
}
}
}
}
<activity android:name=".debug.SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
我项目中 splashActivty 只有是组件模式时才会调用, keepMainActiviyty 则什么模式下都可以调用,
上图中我们说了 keepMainActiviyty 什么模式下都能调用, 我们知道在集成模式下 很简单,写个intent 就可以开启了,但是在集成模式下(合并成一个完整项目)怎么办呢,这事就要引入 路由框架了 这里以 ARouter为例
api 'com.alibaba:arouter-api:1.5.0'
annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
implementation project(path: ':lib_common')
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
@Route(path = "/keepalive/KeepMainActivity")
public class KeepMainActivity extends BaseActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
try {
ARouter.getInstance().build("/keepalive/KeepMainActivity").navigation();
} catch (Exception e) {
e.printStackTrace();
}
参考文章:
https://blog.csdn.net/guiying712/article/details/55213884
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!