UI 跳转部分的具体实现是经由过程在每个 Activity 上添加注解,然后经由过程 apt 形成具体的逻辑代码。这个也是今朝 Android 中 UI 路由的主流实现方法。
经由简单的思虑,我们可能就可以把代码拆分成下面的构造:
2.5 组件的生命周期
因为我们要动态的治理组件,所以给每个组件添加几个生命周期状况:加载、卸载和降维。为此我们给每个组件增长一个 ApplicationLike 类,琅绫擎定义了 >
组件的生命周期
2.6 集成调试
组件之间的数据传输
每个组件零丁调试经由过程并不料味着集成在一路没有问题,是以在开辟后期我们须要把几个组件机集成到一个 app 琅绫擎去验证。因为我们膳绫擎的机制包管了组件之间的隔离,所以我们可以随便率性选择几个组件介入集成。这种按需索取的加载机制可以包管在集成调试中有很大年夜的灵活性,并且可以加大年夜的加快编译速度。
我们的做法是如许的,每个组件开辟完成之后,宣布一个 relaese 的 aar 到一个公共仓库,一般是本地的 maven 库。然后主项目经由过程参数设备要集成的组件就可以了。所以我们再稍微修改一下组件与主项目之间的连接线,形成的最终组件化架构图如下:

最终构造图
2.7 代码隔离
此时在回想我们在刚开端拆分组件化是提出的三个问题,应当说都找到懂得决方法,然则还有一个隐患没有解决,那就是我们可以应用 compile project(xxx:reader.aar) 来惹人组件吗?固然我们在数据传誓┞仿节应用了接口 + 实现的架构,组件之间必须针对接口编程,然则一旦我们惹人了 reader.aar,那我们就完全可以直接应用到个中的实现类啊,如许我们针对接口编程的规范就成了一纸空文。千里之奠定于蚁穴,只要有代码(不论是有意照样无意)是这么做了,我们前面的工作就白费了。
这些问题我们后面一个个来解决,起首我们先看代码解耦要做到什么效不雅,像膳绫擎的直接引用处应用个中的类肯定是不可的了。所以我们认为代码解耦的重要目标就是组件之间的完全隔离,我们不仅不克不及直接应用其他组件中的类,最好能根本不懂得个中的实现细节。只有这种程度的解耦才是我们须要的。
我们欲望只在 assembleDebug 或者 assembleRelease 的时刻把 aar 惹人进来,而在开辟阶段,所有组件都是看不到的,如许就大年夜根本上杜绝了引用实现类的问题。我们把这个问题交给 gradle 来解决,我们创建一个 gradle 插件,然后每个组件都 apply 这个插件,插件的设备代码也比较简单:
- // 根据设备添加各类组件依附,并且主动化生成组件加载代码
- if (project.android instanceof AppExtension) {
- AssembleTask assembleTask = getTaskInfo(project.gradle.startParameter.taskNames)
- if (assembleTask.isAssemble
- && (assembleTask.modules.contains("all") || assembleTask.modules.contains(module))) {
- // 添加组件依附
- project.dependencies.add("compile","xxx:reader-release@aar")
- // 字节码插入的部分也在这诚实现
- }
- }
- private AssembleTask getTaskInfo(List<String> taskNames) {
- AssembleTask assembleTask = new AssembleTask();
- for (String task : taskNames) {
- if (task.toUpperCase().contains("ASSEMBLE")) {
- assembleTask.isAssemble = true;
- String[] strs = task.split(":")
- assembleTask.modules.
推荐阅读
在数据中间范畴,这意味着企业须要对硬件成本进行严格审核,而这促使很多收集企业袈溱采购办事器硬件时选择不太传统的办法;即他们设计大年夜部分硬件,再交由定制制造商临盆办事器。这则意>>>详细阅读
本文标题:Android彻底组件化方案实践
地址:http://www.17bianji.com/lsqh/36376.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示