- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
客户端热门技术跟踪研究报告
客户端热门技术跟踪研究报告杭州移动研发基地背景介绍中国移动已经研发了数百款客户端产品,在目前的客户端研发体系中,存在以下隐患及不足:主要依靠支撑方完成客户端的研发,核心能力没有内化,公司缺乏对客户端研发的掌控力。沟通路径长,合作流程复杂,产品需求无法快速反馈到研发团队大量共性功能模块重复开发,造成大量资源浪费及质量问题升级维护困难,成本增加由于目前的开发模式导致中国移动开发的产品在快速更新的互联网时代没有足够的市场关注度,产品质量差,用户体验不好,无法形成统一的企业品牌效应。同时近期集团在规划未来公司发展方向上,提出了目前中国移动面临的发展挑战:传统语音、数据流量的用户渗透率及发展已经到达瓶颈,未来的发展趋势在数字化服务上会有更大的突破。结合目前的发展思路,集团未来在“第三条曲线-数字化服务”上急需有一杆硬抢来打赢互联网革新带来的战争。目的及意义在集团公司面临的严峻形势下,转型和整合迫在眉睫,集团启动了客户端研发服务平台项目,旨在全面提升客户端研发服务效率降低研发成本共性能力复用开发标准规范化领先技术预研及分享本文档编写的目的在于提供“领先技术的预研与分享”。并通过对热门、领先技术的研究及探索,为集团的客户端研发人员提供技术依据及参考,使开发人员快速了解技术市场,对未来方向把控更加准确。进一步提升客户端研发的整体能力,为客户端研发服务平台提供有力的技术支撑。研究内容概述本文通过对本年度在技术领域出现的热门技术、前沿框架进行探索及研究,抽取部分有代表意义的技术。做到研究的知识内容尽量涉及到绝大部分终端开发的技术领域,并通过对不同技术的介绍、原理说明、示例代码演示并配以流程图来进行图文并茂的介绍。主要的研究内容涉及到的方面有:数据处理类:消息总线、数据总线有哪些信誉好的足球投注网站优化:App IndexingUI页面:react native,IOC布局应用优化类:图片缓存SDWebImage,编译工具gradle用户体验类:锁屏通知,热升级。Android、IOS特性介绍热门技术追踪热升级 hotpatch简介当前主流的升级方式为:客户端向服务器发起版本验证请求,服务器接受并处理请求,当需要升级时,将升级相关信息发送至客户端,客户端执行后续操作,如下载补丁文件,提示用户进行覆盖安装等操作。但此方法有个比较严重的缺点:1.浪费用户流量,每次更新都需要将整个应用程序进行下载更新,较浪费时间和用户流量。造成用户体验差的问题。在这种情况下,热升级技术应运而生。热升级技术顾名思义,就是给线上的应用程序打补丁,直接修复bug,进行应用升级等操作,不用客户端升级。将要修改的patch通过服务侧直接推送到客户端即可。实现原理介绍热升级技术实现的流程图如下:1.实现一个从服务器端获取Patch信息的接口(上传本地客户端版本等信息,服务器好根据这些信息来判断是否有对应的Patch包),并将这个信息注入给HotpatchManager。2.检测客户端是否可以支持。(Android L和Android M)目前都不支持,最低支持2.33.如果客户端支持,那就调用第一步注入的Patch包获取类,获取到对应的Patch信息。下载Patch apk文件。4.校验。获取下载好的Patch apk md5签名信息和服务器给的Patch信息的md5值是否一样,然后还要校验Patch apk和宿主apk签名是否一致。加校验是为了防止Patch apk被篡改,如果load进去了一个第三方的Patch,那就是引狼入室了。5.校验成功,就可以load Patch apk。示例热升级技术的示例代码如下: public class HotpatchManager { Private static HotpatchManager INSTANCE=new HotpatchManager (); Private HotpatchManager () { } Public static HotpatchManager getInstance(IPatchInfoRequest request){ RequestManager.getInstance (). setIPatchInfoRequest(request); return INSTANCE; } Public Boolean init(final Context ctx) { Boolean isSupport = DexposedBridge.canDexposed (ctx); if (isSupport) { new Thread(new Runnable() { @Override public void run() { check(ctx); } }). Start (); } return isSupport; } private
文档评论(0)