美文网首页工作生活
Android组件化开发

Android组件化开发

作者: Mixqum | 来源:发表于2019-07-06 23:01 被阅读0次

组件化案例demo https://github.com/yangchong211/LifeHelper

目录

  1. 为什么组件化
  2. 什么是组件化
  3. 组件化架构
  4. 组件化配置
  5. 组件间通信方案

1. 为什么组件化
传统项目由于单一分层,以包划分业务功能,使代码高度耦合,
随着项目功能增加给多人开发增加维护难度。

2. 什么是组件化
将系统复杂功能拆分,重组的过程。在Android工程表现为把app按照其业务不同,划分为不同的Module

多module划分业务 和 基础功能 是 组件化的基础

组件:指单一的功能组件,比如视频组件,支付组件
模块:独立的业务模块,比如直播模块,首页模块
组件化好处

  • 各个组件专注自身功能实现,模块中代码高度耦合,只负责一项任务,也就是第一责任原则
  • 各业务研发互不干扰
  • 单个业务可以单独编译打包,加快编译速度,提高开发测试效率

3. 组件化架构

组件化架构
  • 基础层包含一个基础库和对基础库的封装,包括图片加载,网络请求,数据存储等
  • 业务组件层包含单一的业务,如登录、直播
  • 应用层用于统筹全部组件,并输出app


    组件化架构

4. 组件化配置
在项目gradle.properties添加

# 是否独立打包, true 以 app module运行
isRunAlone=false

然后每个module的build.gradle增加以下代码

if(isRunAlone.toBoolean()){
    apply plugin: 'com.android.application'
}else{
    apply plugin: 'com.android.library'
}

5. 组件间通信方案
EventBus
RxBus
ARouter
目前路由是最佳方案
路由框架流程

image.png
告诉路由地址,路由从路由表寻址,找到则启动Activity
路由原理:
实现一系列url与特定Activity的映射关系
路由表(一般是Map容器),key是地址,value是Activity class,使用注解处理器 AbstractProcessor 获取指定注解信息,通过反射将Activity写入路由表。最后在跳转时,告诉跳转Activity的地址即可完成跳转。
5.1 组件间通过隐式跳转Activity
通过intent-filter来限定隐式Action
<activity android:name=".SettingActivity">
<intent-filter>
<action android:name="material.com.seetings" exported = "false" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
// 隐式跳转
Intent intent = new Intent("material.com.seetings");
startActivity(intent);

5.2 隐式跳转还可使用APP包名+类名

Intent intent = new Intent();
intent .setClassName("APP包名","Activity路径");
intent.setComponent(new ComponentName("App包名","Activity路径"));
startActivity(intent);

5.3 ARouter路由实现组件间Activity跳转
首先需要在基础组件Base Module添加

complie 'com.alibaba:arouter-api:1.1.0'
// 注解处理器
annotationProcessor 'com.alibaba:arouter-compiler:1.1.1'

注解处理器会使用javaCompileOptions这个配置获取当前module的名字
在各个模块中的build.gradle的defaultConfig属性加入

javaCompileOptions{
annotationProcessorOptions{
arguments = [ moduleName : project.getName()]
}
}

每个模块dependencies需要ARouter apt的引用,在apt中生成索引文件,完成跳转

dependencies{
annotationProcessor 'com.alibaba:arouter-compiler:1.1.1'
}

初始化Application

public class GankApplication extends Application{
public void onCreate(){
ARouter.init(this);
}
}

以Web模块为例,WebActivity需要添加注解Route,path是跳转的路径:

@Route(path = "/gank_web/1")
public class WebActivity extends Activity

使用ARouter跳转,build处填地址,withXXX填key-value,navigation就是发射了路由跳转。

ARouter.getInstance().build("/gank_web/1")
.withString("url",url)
,withString("title",desc)
.navigation();

WebActivity通过getIntent()就可以获取参数了。

Intent baseIntent = getIntent();
String url = baseIntent.getStringExtra("title");
String title = baseIntent.getStringExtra("title");

注意:ARouter依赖v4包,且版本必须是25.2.0以上
@Router(path = "group_name/1")的group_name不能相同

6. ARouter原理
ARouter拥有自身的编译时注解框架,编译器会根据注解生成三个文件,分别是Group,Providers,Root
在Application加载时,ARouter会使用初始化调用init的方法,之后在LogisticsCenter中通过加载编译时注解创建Group,Providers,Root三个类型文件,使用Warehouse将文件保存到三个不同的HashMap对象
Warehouse相当于路由表

ARouter加载过程

7. 组件化方案
RxJava+Retrofit+DeepLinkDispatch

DeepLinkDispatch 借鉴 Retrofit 接口处理设计,OkDeepDispatch对跳转之后的回退会返回一个Observable对象,然后可以无缝接入RxJava

8. APT(注解处理器工具)
APT 是 javac 处理注解的工具,用来编译时扫描和处理注解
简单来说,就是编译期采集注解信息,生成.java文件。
使用步骤
8.1

public class Route extends AbstractProcessor{
}

8.2 注册,在类上加注解@AutoService(Processor.class)
8.3 指定要处理哪些注解 @SupportAnnotationTypes("com.enjoy.router.annotation.Route")

待补充...

相关文章

  • Android 组件化开发实践

    Android组件化开发实践(一):为什么要进行组件化开发?Android组件化开发实践(二):组件化架构设计An...

  • 聊聊组件化开发

    如果你在京东图书频道搜索 组件化 或者 组件化开发,显示的几乎都是 Android组件化开发 或者 Android...

  • Gradle实战——组件化的gradle build优化

    组件化gradle build优化 关于组件化,大家可以看我之前的文章,Android组件化开发实战[https:...

  • Android组件化和插件化开发

    Android组件化和插件化开发 什么是组件化和插件化? 组件化开发 就是将一个app分成多个模块,每个模块都是一...

  • android 收藏的一些好文

    1.常用git命令清单 2.Android组件化、模块化开发 3.Android 组件化案例 4. 5.

  • 推荐文章

    JavaJava中有关Null的9件事 AndroidAndroid组件化和插件化开发Android 组件化 ——...

  • Android组件化和插件化开发

    Android组件化和插件化开发 什么是组件化和插件化? 组件化开发就是将一个app分成多个模块,每个模块都是一个...

  • 「锤子」使用♂手册

    What is a Chuizi 「锤子」是一个Android组件化快速开发框架 特征 组件化开发通用框架, 高度...

  • android 组件化

    Android组件化项目地址:Android组件化项目AndroidModulePattern Android组件...

  • 全面组件化---DDComponentForAndroid分析(

    前言 关于组件化,其实从毕业到现在都在使用组件化的开发方式。因为公司有多个android开发人员,平时需要协同开发...

网友评论

    本文标题:Android组件化开发

    本文链接:https://www.haomeiwen.com/subject/lzdzcctx.html