Rubik Android 组件化开发框架开源项目

我要开发同款
匿名用户2022年12月06日
176阅读

技术信息

开源地址
https://github.com/baidu/Rubik
授权协议
Apache-2.0

作品详情

Rubik是一套解决Adroid平台组件化的综合方案,提供gradleproject之间的路由通讯能力,以及对gradleproject的组件定义、版本控制、mave发布、aar/jar与源码之间的切换以及组件的自由组合等能力。

EglishReadme

Rubik由两部分组成:

RubikRouter:即Rubik的函数级路由能力,与一般的页面路由不同,RubikRouter允许把Uri及参数,导航到工程内部,任意的一个公开的JVM语言(Java/Kotli)函数的执行上,以便于更灵活的进行gradleproject之间不基于代码调用的通讯。Rubik工具链:提供组件上下文的定义、版本控制、mave发布、aar/jar与源码之间的切换等能力,包括4个gradleplugi:rubik:提供全局定义组件的能力,并根据全局定义自动启用rubik-cotext、rubik-root等插件rubik-cotext:提供task,自动生成镜像函数等中间代码,并把中间代码打包成cotext.jar,按版本号发布到mave提供task,把业务代码按flavor、版本号编译成aar(包括代码、资源、内置SDK)发布到mave通过全局定义的组件,为组件所在子工程自动添加其他cotext.jar的依赖rubik-root:给壳工程提供筛选组件等能力,根据flavor、版本号筛选要打包进apk的业务组件提供组件的源码工程和aar切换的能力rubik-test:给工程提供单元测试环境快速开始1.工程创建和组件声明:

  (1)创建或使用已有的一个或多个adroidlibrarymodule,作为"组件工程"(如demo代码中的demo_compoet_detail、demo_compoet_home等),用于开发真正的业务逻辑。

  (2)在最外层工程(gradlerootproject)的build.gradle或gradle.properties文件中配置Rubik版本号等初始化参数,并在最外层工程中启用rubik插件:

ext{rubik_kapt_versio="com.rubik:kapt:1.9.1.1-K1_5"rubik_router_versio="com.rubik:router:1.9.1.1-K1_5"rubik_plugis_versio="com.rubik:plugis:1.9.1.1-AGBT4-K1_5"}applyplugi:'rubik'//启用rubik插件

  (3)在最外层工程的build.gradle文件或同级目录下的rubik-*.gradle文件中,配置组件信息:

rubik{compoet{//第一个组件uri"app://com.myapp.home"//组件的Uridepedecies{//组件需要依赖的其他组件uri("app://com.myapp.detail"){versio"0.1.1"//依赖其他组件的版本}uri(…)}source{//定义默认来源,如不需切换源码和aar,可以只声明project或maveproject(":demo_compoet_home")}}compoet{…}//继续配置第二个组件}2.让组件之间互相通信:

  (1).在接口提供者工程内,通过注解定义路由路径,作为组件暴露给其他组件的通信接口:

    通过RFuctio注解声明函数路由:

@RFuctio(path="accout/user")fugetUser(id:It,ame:Strig):User?{…}

    通过RPage注解声明页面路由:

@RPage(path="page/mai")classHomeActivity:AppCompatActivity(){…}

  (2).执行接口提供者工程对应的"publishRubikXxxRCotextLib"任务,发布组件上下文到云端或本地mave仓库。

  (3).执行接口提供者工程对应的"publishRubikXxxRCompoet"任务,发布组件aar到云端或本地mave仓库。

  (4).在接口调用者工程内,调用上述接口提供者所提供的接口,可以选择两种方式:

    通过KotliDSL:

avigate{uri="app://com.myapp.detail/accout/user"//请求的uriquery{//请求的参数"id"with400"ame"with"CuiVicet"}result<User?>{user->//通过泛型指定接收数据类型,多次异步返回时,可以用多个result接收…}}

    通过自动生成的镜像函数:

DetailCotext.Accout.user(400,"CuiVicet"){user->…//自动生成的镜像函数的参数类型、返回值类型都是明确的,比DSL方式更具有约束力}3.筛选要打包的组件

  (1).创建或使用已有的adroidapplicatioproject,作为"壳工程"(如demo代码中的demo_root_app),用于把组件组装并编译成Apk。

  (2).在"壳工程"的的build.gradle文件或同级目录下的rubik-*.gradle文件中,指定"壳工程"最终要将哪些组件,以哪种方式引入,并打包到最终的编译产物之中:

rubik{packig{projectMode{//projectMode,通过源码工程的方式引入组件uri("app://com.myapp.home")uri("app://com.myapp.*")//支持通过*匹配任意字符}maveMode{//maveMode,通过mave上的aar的方式引入组件uri("app://com.myapp.detail"){versio"0.2.0"}}}}测试通过rubik-test插件,给当前工程的adroidTestvariat添加全部可pick组件的cotext.jar依赖,便于写测试用例。@RuWith(AdroidJUit4::class)classRouterTestCase{@Beforefuiit(){Rubik.iit()}//初始化Rubik@TestfuusePerview(){PerviewCotext.preViewVideo(path){success->log("preViewVideosuccess:${success}")}//测试用例}…//继续写测试用例}

功能介绍

Rubik是一套解决Android平台组件化的综合方案,提供gradle project之间的路由通讯能力,以及对gradle project的组件定义、版本控制、maven发布、aar/jar...

示例图片

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论