JIMU
项目介绍
JIMU(积木)是一套 Android 组件化框架,支持组件的代码资源隔离、单独调试、集成调试、组件交互、UI 跳转、生命周期等完整功能。
取名为 JIMU(积木),其含义是应用这套框架可以做到组件之间的完全隔离,每个组件可以单独运行,同时又可以通过“接口”任意拼接成一个完成 APP,这种能力就是我们实施组件化的最终目的。
最新版本
release-note&change-logs 关注版本变更以及注意事项是个好习惯。
模块 | build-gradle | componentlib | router-anno-compiler | router-annotation |
---|---|---|---|---|
最新版本 |
仓库 2:
模块 | build-gradle | componentlib | router-anno-compiler | router-annotation |
---|---|---|---|---|
最新版本 |
因为没有创建组织账号,可能会发布到不同的仓库,出现版本差异时请关注下 release-note
实现功能:
- 组件可以单独调试
- 杜绝组件之前相互耦合,代码完全隔离,彻底解耦
- 组件之间通过接口+实现的方式进行数据传输
- 使用 scheme 和 host 路由的方式进行 activity 之间的跳转
- 自动生成路由跳转路由表
- 任意组件可以充当 host,集成其他组件进行集成调试
- 可以动态对已集成的组件进行加载和卸载
- 支持 kotlin 组件
原理解析
组件化设计思路 浅谈 Android 组件化
原理解释请参考文章Android 彻底组件化方案实践
demo 解读请参考文章Android 彻底组件化 demo 发布
使用指南
1、主项目引用编译脚本
在根目录的 gradle.properties 文件中,增加属性:
mainmodulename=app
其中 mainmodulename 是项目中的 host 工程,一般为 app
在根目录的 build.gradle 中增加配置
buildscript {
dependencies {
classpath 'com.github.jimu:build-gradle:A.B.C'
}
}
current lastest version 1.3.2 has just post a request to includeed in the bintray's jCenter,maybe you cannot fetch it before the request has been approved
为每个组件引入依赖库,如果项目中存在 basiclib 等基础库,可以统一交给 basiclib 引入
compile 'com.github.jimu:componentlib:A.B.C'
2、拆分组件为 module 工程
在每个组件的工程目录下新建文件 gradle.properties 文件,增加以下配置:
isRunAlone=true
debugComponent=sharecomponent
compileComponent=sharecomponent
上面三个属性分别对应是否单独调试、debug 模式下依赖的组件,release 模式下依赖的组件。具体使用方式请解释请参见上文第二篇文章
3、应用组件化编译脚本
在组件和 host 的 build.gradle 都增加配置:
apply plugin: 'com.dd.comgradle'
注意:不需要在引用 com.android.application 或者 com.android.library
同时增加以下 extension 配置:
combuild {
applicationName = 'com.luojilab.reader.runalone.application.ReaderApplication'
isRegisterCompoAuto = true
}
组件注册还支持反射的方式,有关 isRegisterCompoAuto 的解释请参见上文第二篇文章
4、混淆
在混淆文件中增加如下配置
-keep interface * {
<methods>;
}
-keep class com.luojilab.component.componentlib.** {*;}
-keep class com.luojilab.gen.router.** {*;}
-keep class * implements com.luojilab.component.componentlib.router.ISyringe {*;}
-keep class * implements com.luojilab.component.componentlib.applicationlike.IApplicationLike {*;}
注意:com.luojilab.component.componentlib 和 com.luojilab.gen.router 包可能在项目迁移的过程中发生过或即将发生变化,文档更新不一定及时,请手工确认一下生成类的包路径。
关于如何进行组件之间数据交互和 UI 跳转,请参看 Wiki 关于消息中间件,请参考v1.3.3releaseNote
组件化讨论群
JIMU 的讨论群,群号 693097923,欢迎大家加入:
PS:最近千人群满了,建议一些基础性问题仔细琢磨下文章,比较麻烦的问题提 issue 求助。
