CC是一套Android的组件化框架,由CC核心API类库和cc-register插件组成
模块 | CC | cc-register |
---|---|---|
当前最新版本 |
CC是一套基于组件总线的、支持渐进式改造的、支持跨进程调用的、完整的Android组件化框架
CC的设计灵感来源于服务端的服务化架构,将组件之间的关系拍平,不互相依赖但可以互相调用,不需要再管理复杂的依赖树。
了解业界开源的一些组件化方案:多个维度对比一些有代表性的开源android组件化开发方案
demo下载(主工程,包含ComponentB之外的所有组件)
demo_component_b组件单独运行的App(Demo_B)下载
以上2个app用来演示组件打包在主app内和单独以app运行时的组件调用,都安装在手机上之后的运行效果如下图所示
- cc 组件化框架基础库(主要)
- cc-register CC框架配套的gradle插件(主要)
- cc-settings-2.gradle 组件化开发构建脚本(主要)
- demo demo主程序(调用其它组件,并演示了动态组件的使用)
- demo_base demo公共库(base类、util类、公共Bean等)
- demo_component_a demo组件A
- demo_component_b demo组件B(上方提供下载的apk在打包时local.properties中添加了demo_component_b=true)
- demo_component_jsbridge demo组件(面向组件封装的jsBridge,并演示了如何进行跨进程组件调用)
- demo_component_kt demo组件(kotlin)
- demo_interceptors demo全局拦截器(如果有多个app并且拦截器不同,可以创建多个module给不同app使用)
- cc-settings-demo.gradle 演示如何自定义配置文件,如:添加actionProcessor自动注册的配置
- demo-debug.apk demo安装包(包含demo/demo_component_a/demo_component_kt)
- demo_component_b-debug.apk demo组件B单独运行安装包
创建一个组件很简单:只要创建一个IComponent
接口的实现类,在onCall方法中实现组件暴露的服务即可
public class ComponentA implements IComponent {
@Override
public String getName() {
//指定组件的名称
return "ComponentA";
}
@Override
public boolean onCall(CC cc) {
//在此处将组件内部的服务暴露给外部调用
//组件内部的逻辑与外部完全解耦
String actionName = cc.getActionName();
switch (actionName) {
case "showActivity": //响应actionName为"showActivity"的组件调用
//跳转到页面:ActivityA
CCUtil.navigateTo(cc, ActivityA.class);
//返回处理结果给调用方
CC.sendCCResult(cc.getCallId(), CCResult.success());
break;
default:
//其它actionName当前组件暂时不能响应,可以通过如下方式返回状态码为-12的CCResult给调用方
CC.sendCCResult(cc.getCallId(), CCResult.errorUnsupportedActionName());
break;
}
return false;
}
}
CC 使用简明的流式语法API,因此它允许你在一行代码搞定组件调用:
"CC"也是本框架主入口API类的类名,是由ComponentCaller缩写而来,其核心职能是:组件的调用者。
CC.obtainBuilder("ComponentA")
.setActionName("showActivity")
.build()
.call();
也可以这样
CC.obtainBuilder("ComponentA")
.setActionName("showActivity")
.build()
.callAsync();
或者这样
CC.obtainBuilder("ComponentA")
.setActionName("showActivity")
.build()
.callAsyncCallbackOnMainThread(new IComponentCallback() {
@Override
public void onResult(CC cc, CCResult result) {
String toast = result.isSuccess() ? "success" : "failed";
Toast.makeText(MainActivity.this, toast, Toast.LENGTH_SHORT).show();
}
});
不需要额外的混淆配置
CC专用版:cc-register,fork自AutoRegister,在自动注册的基础上添加了一些CC专用的业务
通用版:
源码:AutoRegister 原理:android扫描接口实现类并通过修改字节码自动生成注册表
请点击:更新日志
CC.enableDebug(true); //普通调试日志,会提示一些错误信息
CC.enableVerboseLog(true); //组件调用的详细过程日志,用于跟踪整个调用过程
QQ群号:686844583
或者扫描下方二维码加群聊