交付背景下的移动端脚手架-思考与设计

简介: 本文是作者在经历过多个移动端相关交付项目后,提炼总结,在表述自己的思考历程和设计思路外,更有抛砖引玉之意,架构设计本就仁者见仁智者见智,如果文中某些观点或设计在读者看来有独到的想法,欢迎分享交流。

背景

交付技术平台部,是一个面向项目交付的前线技术,项目交付质量和效率是我们要持续解决优化的服务内容,我们作为一个项目服务群体,从移动端交付的角度去看,面临两个问题:

  1. 如何能更好的指导isv进行架构/组件设计,功能开发
  2. 如何更好的把产研雄厚的技术沉淀应用到每个需要的项目中去

脚手架可以很好的解决,一方面脚手架可以帮助项目进行初期架构搭建和基础的共性模块开发,同事大量的样例、模板代码可以极大程度的在项目间复用,降低对isv等开发者的架构经验要求,可专注于业务开发或遵循现有的架构逻辑进行合理的扩展和维护;其次对产研产品哪些移动中间件的包装,也可消除SA、TM或者客户对移动中间件技术选型的顾虑,缩短这些产品落地到项目的路径,同时也能加强交付能力所需要的技术体系。

建设目标

  • 交付提效
  • 提高项目交付的速度和质量
  • 不断提高不同项目间的代码复用
  • 交付开发指导
  • 通过部分样例引导进行规范化开发
  • 云产品的集成和包装
  • 适度的包装和封装,可解耦项目业务层和paas层的直接依赖,对复杂部分做隔离和统一配置,提高业务的开发效率
  • 行业交付模板基座
  • 不变的是底座,变化的是业务,基座要能承载和支撑各种形态的业务属性

思考&建设

面临的问题

  1. 高效:脚手架设计的初衷,提高生产效率,减少重复劳动,降低人工成本。
  2. 安全 :从开发层面,通过架构规范安全开发行为。
  3. 成熟:基于成熟的技术方案,快速开发,有效避坑。
  4. 稳定:保证APP线上运行的稳定性,健壮性,事故处理的效率
  5. 扩展/维护:合理的架构可有效的支撑和响应业务的快速迭代和变化。

核心点建设分析

以下对所有建设模块做简单的功能描述,技术分析,后续会出单独的文章讲解

分层设计

框架层(Framework)设计

这一层为整体脚手架核心架构层,通过以下几个模块,支撑起APP整个框架,

  • Launcher 启动模块,用于管理APP启动任务,以达到APP启动任务可监控,可管理目的
  • Facade 通信模块,一般用于业务模块间信息提供,通过接口形式对外暴露,面向接口编程
  • Router  路由模块,基于ARouter封装,主要用于页面跳转统一管理,降级,安全策略配置
  • Window 页面容器框架,统一的容器基类,管理状态栏,标题栏,主题,色表等基础资源
  • Service 服务模块,常驻或非常驻服务管理类

中间件封装

这里中间件一般指的是类似崩溃、诊断日志、性能监控等APM产品,统计及行为分析系统、推送平台、运营配置平台等云产品。

这些产品对于一般的项目甲方是不具备自建能力的,所以一般项目都是从各大移动PaaS厂商的云产品中做技术选型决策,有些在项目由于历史原因,启动前就已经确定了使用的厂商,而大部分可能到了方案设计阶段还没有决策下来,因为客户不懂或者开发承接方理解也不深。

所以,我们这里设计的这一层,主要是解决两个核心问题:

  1. 打消技术选型的顾虑
  2. 项目实际情况的适配
1. 打消技术选型顾虑

各大PaaS厂家云产品的功能范围大同小异,而且大部分都是基于自家一方的产品沉淀而来,所以这里首推基于淘系的EMAS产品,经过手淘等多款亿万级产品的打磨和沉淀而来,不论从技术底蕴还是功能范围来评估,都能保证客户的需求满足以及稳定性的保障。

2. 项目情况历史适配

有些项目,可能客户再开新产品线之前,历史项目或许已经采购了其他的产品,比如mPaaS,那么,我们脚手架也需要有着包容适配的能力,这里的处理方案如下:


从工程结构图看,设计一个PaaS层,该层下有对每个中间件产品的单独module,这里拿App更新升级的功能为例,如图所示:paas层是在framework层之上的,依赖framework层能力并受launcher启动器的管理,所以在做适配的时候,只需要替换对应的paas.update依赖库,然后再代码层面做相关的适配即可(目前版本需要做手动修改,后续可扩展脚手架模板),其他模块和工程结构不用做修改,以达到最小范围修改的适配目的。

通用层

隔离业务接入层和PaaS层的一个适配层,封装配置PaaS层、Framework层等项目相关特性,提供ToolKit工具集

业务集成层

整个架构最顶层

  1. 内部模块采用组件化方式进行开发,模块间相互隔离,不直接依赖,通过Framework层进行必要的通信和调用,依赖Framework:window层进行页面框架搭建,router模块进行跳转等,
  2. 集成部分,主要负责合DevOps打通(下节讲述),同时管理整个APP的依赖关系,组件集成等能力

devops打通

这里的devops打通一般流水线打通为主要功能点,这里展开一下,一般情况,为了满足开发->测试->发布->迭代等各阶段的出包需求,流水线一般会包含一些定制化能力,比如:

  1. 参数传递:版本号、构建号、渠道号、环境(测试、验收、预发、生产···)等
  2. 构建类型:包类型(debug、release;通过构建命令控制`assemble$flavorName$type`,不展开)
  3. falvor类型:(渠道包概念,通过构建命令控制`assemble$flavorName$type`,不展开)
参数传递方式

Android构建基于gradle插件,所以在流水线参数到gradle构建参数传递一般有两种方式:

  1. -Pxxx 传参:这个方式属于gradle脚本语言参数,可通过
./gradlew assembleDebug -PBUILD_ID='1781181'
/*** 获取gradle执行通过-P传递的参数信息* @param key -PKey* @param defValue 默认值* @return 传入值*/getPropertyValue= (key, defValue) -> {
returnString.valueOf(project.hasProperty(key) ?project.getProperty(key) : defValue)
}
/*** 写入到BuildConfig中*/buildConfigField'String', 'BUILD_ID', '"'+getPropertyValue("build_id", "123") +'"'


  1. 环境变量:通过环境变量设置在本地,gradle构建时通过读取本地环境变量进行获取
exportBUILD_ID='1314123'
/*** 获取环境变量,后续可以考虑都用这种方式,更简单些* @param key* @param defValue* @return*/getEnvValue= (key, defValue) -> {
defval=System.getProperty(key);
if (null!=val) {
returnval;
}
val=System.getenv(key);
if (null!=val) {
returnval;
}
returndefValue;
}
/*** 写入到BuildConfig中*/buildConfigField'String', 'BUILD_ID', '"'+getEnvValue("build_id", "123") +'"'

展望

脚手架的建设只是个开始,是云巧移动端解决方案的基础技术底座,随着交付项目的使用越来越多,以及对脚手架所赋予的能力,我们会沉淀出越来越多的行业交付模板,完整的场景化解决方案以及源代码、超级APP解决方案。

相关文章
|
机器学习/深度学习 算法 安全
【加密算法】RSA非对称加密算法简介
【加密算法】RSA非对称加密算法简介
|
监控 API C++
一个更好的文件监控类,基于 DotNet 官方提供的 FileSystemWatcher
一个更好的文件监控类,基于 DotNet 官方提供的 FileSystemWatcher
|
人工智能 数据中心 芯片
液冷是大模型对算力需求的必然选择?|英伟达 GTC 2024六大亮点
在这个以高性能计算和大模型推动未来通用人工智能时代,算力已成为科技发展的隐形支柱。本文将重点探讨算力的演进,深入分析在不同领域中算力如何成为推动进步的基石;着眼于液冷如何突破算力瓶颈成为引领未来的先锋,对液冷散热的三种方式(冷板式、浸没式和喷淋式)做了详细的对比分析、成本测算和市场空间预测。并为您提供一份“实用教程”,指导如何将普通服务器改装为液冷服务器,以应对越来越复杂的计算需求。
1015 3
|
3月前
|
数据采集 存储 人工智能
什么是数据治理?企业建设数据治理系统费用全攻略(2025年12月更新)
在数字经济时代,数据治理已成为企业释放数据价值的核心战略。本文深入解析数据治理内涵,聚焦成本、选型与实施路径,对比瓴羊Dataphin、字节Dataleap等主流平台能力,提供2025年最新费用参考与落地建议,助力企业科学决策,实现数据资产化与智能化升级。(238字)
什么是数据治理?企业建设数据治理系统费用全攻略(2025年12月更新)
|
存储 算法 Android开发
AVB校验微观版本:android avb(Android Verified Boot)验证
AVB校验微观版本:android avb(Android Verified Boot)验证
2425 0
|
人工智能 JSON 测试技术
Search-o1:人大清华联合推出动态检索推理框架,使模型能够在推理过程中动态检索外部知识
Search-o1 是中国人民大学和清华大学联合推出的创新框架,通过动态知识检索和精炼,提升大型推理模型在复杂任务中的推理能力。
625 23
Search-o1:人大清华联合推出动态检索推理框架,使模型能够在推理过程中动态检索外部知识
|
机器学习/深度学习 人工智能 自然语言处理
转载:【AI系统】AI的领域、场景与行业应用
本文概述了AI的历史、现状及发展趋势,探讨了AI在计算机视觉、自然语言处理、语音识别等领域的应用,以及在金融、医疗、教育、互联网等行业中的实践案例。随着技术进步,AI模型正从单一走向多样化,从小规模到大规模分布式训练,企业级AI系统设计面临更多挑战,同时也带来了新的研究与工程实践机遇。文中强调了AI基础设施的重要性,并鼓励读者深入了解AI系统的设计原则与研究方法,共同推动AI技术的发展。
转载:【AI系统】AI的领域、场景与行业应用
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
624 3
|
消息中间件 JavaScript RocketMQ
消息队列 MQ产品使用合集之是否支持任意时间延迟的消息
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
存储 机器学习/深度学习 人工智能
顶顶通呼叫中心中间件介绍
顶顶通呼叫中心中间件包含IPPBX、自动外呼、质检、ACD、呼叫路由等呼叫中心功能,也包含电话机器人开发接口(ASR【对接了华为云,腾讯云,科大讯飞,阿里云,捷通华声等,mrcp等语音识别接口】,TTS【支持外呼时预先文字转换成声音和mrcp实时TTS】,VAD【集成噪音人声识别引擎】),话术引擎等ai机器人功能。所有数据都存储redis【话单可以存储到数据库】,支持群集,超大并发,可用于开发呼叫中心系统,智能外呼机器人系统,机器人客服系统。
708 100