加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

戏说移动江湖开发历程

发布时间:2019-01-02 23:27:22 所属栏目:移动互联 来源:Todo2
导读:大主线 细说移动开发历程 大技术 组件化开发 组件路由 组件配置动态加载 组件骨架架构 插件化开发 静态插件化 动态插件化 细节雕琢 网络层的优化和架构 动态埋点的实现 技术层架构(MVP,MVVM等模式) 前言 你可能的收获: 理解整个公司移动开发的基线和主线

问题1的思考,既然实现解耦合同时实现热拔式方案,说白点就是当前模块开关关闭,被其他引用的模块无法感知到这个模块被关闭,即其他模块引用的代码必须不能硬编码此模块的方法和引用类等等,方案就是组件路由,调用方通过字符串path查询模块的服务和功能。

问题2的思考,代码权限管理一般通过git或者svn去实现。

问题3的思考,可以通过gradle脚本实现模块打包上传私服。

问题4的思考,gradle本身问题加上模块多导致编译速度慢,根据业务线的独立性那我们可以通过编写业务模块时给此模块实现App模式,减少其他不必要的代码编译和运行。实现方案大体如下:

在模块gradle编译脚本通过标识符来区分是模块还是可独立运行的App

  1. sourceSets {  
  2.         main {  
  3.             jniLibs.srcDirs = ['libs']  
  4.             if ("true".equals(FINANCE_IS_APPLICATION)) {  
  5.                 manifest.srcFile 'src/main/diff/appmodule/AndroidManifest.xml'  
  6.                 java.srcDirs = ['src/main/java', 'src/main/diff/appmodule/java']  
  7.                 res.srcDirs = ['src/main/res', 'src/main/diff/appmodule/res']  
  8.                 assets.srcDirs = ['src/main/assets', 'src/main/diff/appmodule/assets']  
  9.             } else {  
  10.                 manifest.srcFile 'src/main/diff/libmodule/AndroidManifest.xml'  
  11.                 java.srcDirs = ['src/main/java', 'src/main/diff/libmodule/java']  
  12.                 res.srcDirs = ['src/main/res', 'src/main/diff/libmodule/res']  
  13.                 assets.srcDirs = ['src/main/assets', 'src/main/diff/libmodule/assets']  
  14.             }  
  15.         } } 

这样我们需要单独运行此模块,在gradle.properies把FINANCE_IS_APPLICATION为true然后编译就可以实现业务代码编写和运行。有人问,如果我需要实现主App里面的新业务,那你可以关闭其他无关的模块实现快速编译提高开发效率。

问题5的思考,随着项目的增大和多渠道的打包,此时需要进行考虑项目周边的业务服务,例如提供给测试人员的打包测试,正式版的发布等等自动化产出问题。

一般自动化服务可以通过搭建jenkins服务,或者配合python脚本实现自动化打包功能,其

脚本的功能因公司而异。

戏说移动江湖开发历程

图三

所以此时迫切需要一个熟悉gradle,python等脚本的同志(gradle本身是grovvy语言)。保证新业务的开发的情况下整个过程的重构和完善至少需要半年时间(大公司除外)。

慢慢发现,组件化架构无声无息的出现了,是不是很神奇。

回过头发现组件化架构已经进行了一小部分,信心十足,继续干,此时必须祭出毛爷爷的红本子,大声的朗读出来,我爱编程,皮肤好好!!

我们发现已经做了业务模块化代码分离和模块间路由互调通信以及gradle组件化脚本;

你的成长是建立在公司的成长上,随着公司业务发展庞大,种种缘由业务伴随着也会出现分支独立,需要某些子业务线独立出App提供专业的服务和体验;需要撒播种子开花结果,原先的子模块可能变成独立App,所以发现目前的架构是没法实现,对,走过来,请在菩提树下思考;其根本缘由就是组件化不完全导致的。其中最大问题就是主项目模块涉及到大量的以前最早的业务代码和功能,现在最迫切问题是需要把主项目的业务剥离变成一个业务子模块加一个纯粹的项目骨架,其中项目骨架必须上升一级变成新的主项目模块,此主项目模块包含项目公共业务。说白点,把项目骨架套在其他子模块就是一个独立的App可以运行;

作为对比,图四为原架构图,图五为主项目模块上升一级为项目骨架的架构图

其中主项目骨架必须包含的功能有:

  1. 项目升级降级功能;
  2. 第三方库的引用和初始化工作;
  3. 实现子模块加载和引入以及初始化工作;
  4. 周边服务或插件的引入和初始化工作;例如Tinker和bugly等
  5. 。。。

戏说移动江湖开发历程

中期架构
戏说移动江湖开发历程
组件化成型架构

这个时候组件化大体已经完整成型,现在唯一需要做的就是通过gradle脚本去做粘合器,脚本配合jenkins动态实现模块间和主项目骨架的组合;

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读