YonBuilder移动开发基础教程——云修复

1 使用场景

在项目开发中,我们经常会遇到一种场景,对于一些已经上架应用市场对外发布的应用,我们需要修改其中部分页面的部分内容样式或功能逻辑,通常的做法是我们修改后,重新编译一个新的版本,然后提交应用市场去发布一个更新的版本。但是有些时候,我们可能会遇到以下的场景,不适合正常的发版操作:

  • 场景1:项目内需要修改的这个问题比较小(比如出现了错别字),不值得去单独发布一个新的版本,但是不改的话,又让人看着很别扭很难受;
  • 场景2:项目产生一个突发的恶性Bug,需要马上修复避免产生重大损失(比如支付订单有漏洞,随时可能会被人薅羊毛),此时发新版本需要应用市场审核,时间上来不及,晚一点都有可能造成重大损失;

遇到上面的场景,我们就可以使用「云修复」功能来处理解决问题了。云修复的具体功能,就是将你需要修改的页面,编辑修改好后,提交一个widget修复包到云端平台。已经安装在用户手机上的APP应用,通过引擎内置的云修复机制,就可以自动获取并下载你提交的云修复包,自行进行页面内容的修复替换,从而实现不发版的解决应用内Bug的修改。

云修复功能在具体的运营项目中非常实用,我们开发者一定要了解和掌握该功能的具体操作使用。

2 操作流程

云修复需要两个产物和一个操作,两个产物具体就是待修复正式版APP修复补丁的zip文件,一个操作就是在云平台的「运营管理」- 「版本管理」-「云修复」页面,提交补丁文件并发布。下面我们来进行具体的操作流程演示及说明讲解。

2.1 配置开启云修复

访问云端开发者中心 -> 登录进入「工作台」-> 在「移动应用开发」版块的应用列表选择具体应用进入应用详情页 -> 切换到端设置面板页,将该页面内「云修复」配置选项设置为开启。

这个配置是云修复功能的前提条件,如果不开启,则待修复的APP将不会收到云修复的消息通知。

在这里插入图片描述

PS: 原本的开发流程是在应用项目代码的 config.xml 文件中,通过修改 smartUpdate参数来开启或关闭云修复。不过平台更新后,云端工作台的这个设置优先级要高于 config.xml 中的配置,也就是说一旦两者设置的有冲突,是以网站工作台的设置为准的。所以开发者特别是之前已经习惯了旧的开发流程的开发者一定要注意。

在这里插入图片描述

关于 config 配置参数的更多介绍,可以点击config.xml应用配置说明查看

注意!!!:这个云修复的配置修改后,是需要重新编译新版本才会生效的。也就是说如果你之前发布的版本在编译时云修复是关闭的,那么及时现在你开启了云修复功能,那个旧版本的APP也是无法收到云修复通知的,只有重新编译新的版本才可以。

2.2 编译用于演示的正式版

本步骤主要用于生成一个用于测试的新版本APP,在实际场景中,对应的就是那个存在问题,需要去修复的已发布APP版本。

具体编译操作,在应用详情页切换到「移动打包」面板页,选择对应的版本进行编译即可。编译完成后,在手机端安装该版本的应用。

在这里插入图片描述

注意!!!:这里需要提醒一下,云修复功能只会在正式版本生效,所以我们需要编译正式版才行。

2.3 创建云修复补丁文件

2.3.1 云修复原理简述

这里先简单说一下云修复的底层实现逻辑,方便开发者快速的理解该功能的实现原理。

在APP启动后,引擎会请求云修复的相关api接口,查询当前APP版本是否存在云修复补丁,如果存在则引擎会进行更新下载修复补丁文件。下载完成后,引擎会将补丁文件解压,并替换到原本项目中同路径位置的同名文件(这里的替换操作不是简单的覆盖,不过最终实现的效果差不多,所以大家这样理解就可以)。这样就实现了同名文件的替换,从而完成了类似热修复效果的云端修复功能。

这里需要注意和APP重新启动有关的两点,即云修复的触发和生效,具体如下:

  • 触发:云修复的查询只有在APP启动后才会触发,在APP运行期间,引擎不会频率的轮询查询云修复更新补丁,所以想测试云修复功能的触发,一定要重新启动APP才可以;

  • 生效:云修复成功后,因为当前旧的文件已经被运行中的APP占用,所以需要等待APP重新启动后,新的替换文件才会生效。也就是说云修复完成后,必须重启新的补丁文件才会生效;

2.3.2 云修复补丁文件结构说明

云修复补丁文件,是一个包含 widget 文件夹的zip压缩包。它的结构的最外层是名称为 widget 的文件夹,里面存放的就是具体需要修复的补丁文件。这里需要说明的是,补丁文件在 widget 文件夹里的路径位置一定要与APP源码的文件位置保持一致,并且文件名称相同,才能实现替换修复,否则即使云修复操作完成了,引擎也无法实现补丁文件的修复。

为了方便理解,下面展示一下项目源文件结构和云修复补丁的文件结构示意图(假设准备修改项目中html文件夹下的main.html文件内容)

在这里插入图片描述

再次画一下重点:

  • 最外层的文件夹名称固定为 widget
  • widget 文件夹内部待修复的文件结构要与原编译版本的源码结构保持一致,及文件路径和文件名都要保持一致。比如上图,虽然修改的是 main.html 文件,但是 html 文件夹也是需要创建出来的;
  • 上图是指展示了一个单独文件的云修复,多个文件的云修复也是如此,将修改后的文件按原文件结构路径放置在 widget 文件夹内对应的位置;
  • 压缩文件时,包含 widget 文件夹整体压缩,不要只压缩文件夹内部的文件。
2.3.3 关于stml文件的特殊处理规则

stml 文件是 avm 框架的专属文件格式,该文件在编译APP版本前,内部会有一个 build 的编译过程,最终安装到用户手机的APP里时,并不存在扩展名为 stml 格式的文件,所以对于stml的文件,我们需要单独特殊处理。

具体处理方法如下:

  • 修改项目文件:在 YonStudio 开发工具里,修改文件内容并保存;
  • 编译项目文件:在顶部菜单「项目」的下拉菜单中选择「编译项目」;
  • 复制编译后的目标文件:编译完成后,在项目文件夹下会有一个.bin的隐藏文件夹(如下图),里面已经将stml文件都编译成了同名的js文件。我们只需要将需要修复的stml文件的同名js文件复制,并粘贴到widget修复补丁文件夹内的对应位置即可。

在这里插入图片描述

举例说明:假如我们准备修复 pages/main/main.stml 文件,则编译项目文件后,复制 .bin/main/main.js 文件到 widget文件夹内的 pages/main 目录内,最终该文件在云修复补丁文件的位置路径是: widget/pages/main/mian.js

2.3.4 模拟制作一个云修复补丁

1.打开 YonStudio 开发工具,导入项目代码(新项目可以直接通过顶部菜单的项目-导入项目-云端检出)
2.修改需要云修复的目标文件内容,这里我们修改一下 html文件夹下的 main.html 文件,例如我们把页面内30行的 label 标签内的内容文字“Hello APP”修改成“Hello, world! 云修复测试成功!”

```
<body>
    <label>Hello, world! 云修复测试成功!</label>
    <div id='sys-info'></div>
</body>
```

3.保存文件

4.创建一个空的 widget 文件夹,并在 widget 文件夹内再创建一个空的 html 文件夹,然后将我们修改后的 main.html 文件,COPY到新的 widget/html 文件路径内。

在这里插入图片描述

5.将 widget 文件夹压缩为名称为 widget.zip 的压缩文件(macOS系统直接右键 widget 文件夹,就有压缩操作的命令;windows可以使用第三方的压缩软件完成压缩)

在这里插入图片描述

至此,我们已经完成了云修复补丁压缩文件的制作。

2.4 发布云修复

完成了云修复补丁的制作后,就到了最终的发布云修复环节,具体发布流程如下:

  • 登录开发者中心工作台,进入应用详情页,切换到「运营管理」-「版本管理」-「云修复」面板页

  • 按页面内容要求填写相关的参数值,点击「更新」按钮,及完成了云修复补丁的发布。

    在这里插入图片描述

注意:这里为了方便查看验证云修复是否生效,我们选择「修复方式」为「提示修复」,正常在生产环境中,我们通常都是进行一些Bug类微小问题修改,为了避免引起用户的反感,通常建议选择「静默修复」。

2.5 验证云修复结果

  1. 真机验证:在手机端重新启动上面新安装的APP,如果顺利的话,APP启动后,页面内会弹出云修复更新的提示弹窗。

    在这里插入图片描述

  2. 在云端的应用详情页,切换到「运营管理」-「版本管理」-「云修复」面板页,在底部的修复记录列表中,可以通过「修复数」字段查看当前版本已经成功修复的客户端数量。

    在这里插入图片描述

3 注意事项

1.开发者需要根据自己的业务逻辑需要,认真考虑自己的项目是否需要开启云修复功能。因为在某些应用平台是禁止使用类似云修复的这类远程热修复效果的功能的,特别是iOS,如果开启了云修复功能,有可能商家审核时被拒。所以建议在应用上架的第一个版本,轻易不要开启云修复,如果有需要,以后的升级迭代版本再开启。

2.云修复功能的主要目的是进行微小功能代码的修复,所以应尽量避免widget修复补丁包过大,否则可能会引起APP静默下载失败,导致整个云更新执行失败。

3.尽可能的降低云修复的使用频率,非必要不使用。如果频繁的使用云修复,在某些平台上容易被封号。

4.云修复生效的前提条件,当怀疑云修复未生效时,可以参考这些条件进行分析排查:

  • 如果修复的目标版本存在可升级版本,即更高级别的已发布版本(就是通过云端-「运营管理」-「版本管理」-「版本更新」发布了新的版本),无论你这个版本是不是强制更新,版本更新是开启还是关闭,针对当前低版本的云修复都不会生效;
  • 云端发布的widget.zip压缩包的下载链接必须有效,如果用户自己填写的是第三方平台的下载地址,可以使用浏览器测试下是否可以下载;
  • 云端发布云修复补丁后,对应的用户手机端需要重启启动后,才会执行云修复更新检测,如果用户当天没有启动过手机或者是在发布云修复之前已经启动了APP,那么是不会触发云修复更新的,所以开发者发布云修复后,不要着急马上看效果,需要让「子弹飞一会」;
  • 云修复特别是选择了静默修复时,不光用户无感,我们开发者也是没法判断修复是否成功的。因为静默更新是没有任何提示,同时执行静默更新时,客户端APP的引擎需要一定的时间去下载云修复补丁的压缩文件(这个下载过程时间的长短,会受手机环境当时的网速和手机性能的影响变化),如果在下载的过程中用户关闭了APP(或者断网了),则云修复失败,那么就需要等待下次用户再重新启动APP,才会触发新一轮的云修复更新流程。
  • 用户的APP底层更新完云修复文件后,需要用户关闭APP,重新启动后,新的补丁文件才会生效。
  • 由于静默更新,很难判断更新内容是否成功,所以为了加强判断,如果是修复文件样式这类需要一定规则才会生效的功能代码时,建议在一个不起眼的地方修改一点点文字内容,用于当云修复不生效时,我们去判断到底是云修复操作未生效,还是写的样式代码有问题导致的修复未生效。(别小看这一小点,在一些场景下会很实用)

4 总结

关于云修复,其实是一个功能非常简单的操作,上面之所以啰里啰嗦的说了一大堆,主要目的还是为了方便广大的开发者伙伴们,在遇到云修复异常的场景时,能够有足够的经验去判断分析具体是哪里或哪个步骤出的问题,进而能够轻松的解决问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/653339.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【NumPy】使用NumPy计算相关系数:详解numpy.corrcoef函数及应用

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

Linux--构建进程池

目录 1.进程池 1.1.我们先完成第一步&#xff0c;创建子进程和信道 1.2. 通过channel控制&#xff0c;发送任务 1.3回收管道和子进程 1.4进行测试 1.5完整代码 1.进程池 进程池其产生原因主要是为了优化大量任务需要多进程完成时频繁创建和删除进程所带来的资源消耗&#…

数码论坛|基于SprinBoot+vue的数码论坛系统(源码+数据库+文档)

数码论坛系统 目录 基于SprinBootvue的数码论坛系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2 管理员功能模块 3 用户后台管理模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&am…

【Python编程】给电脑安装最新的 Python3.12.3

笔者最近更换了新的Win11系统&#xff0c;安装最新的Python版本&#xff08;3.12.3&#xff09;尝尝鲜。据说这个版本存在一些漏洞&#xff0c;笔者将后续更新编程过程中的相关问题&#xff08;如果有&#xff09;。Python3.12.3的安装过程比较简单&#xff0c;在此进行说明。 …

现在AI发展迅猛的情况下,应届生选择Java还是C++?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;AI迅猛发展的情况下&#xf…

巅峰对决:OpenAI与Google如何用大模型开创未来

2024年&#xff0c;人工智能领域正引领着一场波澜壮阔的全球技术革命。 5月14日&#xff0c;OpenAI揭开了其新一代多模态人工智能大模型GPT4系列的神秘面纱&#xff0c;其中GPT-4o不仅拥有流畅迷人的嗓音&#xff0c;还展现出幽默、机智和深刻的洞察力……紧接着&#xff0c;在…

Vulnhub靶机 whowantsobeking :1 打靶 渗透详细过程(萌新)

Vulnhub靶机搭建配置 先搭建vulnhub靶机&#xff1a;https://www.vulnhub.com/entry/who-wants-to-be-king-1,610/ 下载镜像之后whowantsobeking.ova后&#xff0c;用VMware Workstation Pro打开依次点击文件-打开&#xff0c;选择我们刚才下载的ova文件打开&#xff0c;修改…

数字化转型瓶颈,无代码轻松破局!

随着信息技术的迅猛发展&#xff0c;企业数字化转型已成为推动业务增长、提升竞争力的关键所在。 然而&#xff0c;在实际操作过程中&#xff0c;许多公司却面临着转型困难、进展缓慢甚至停滞不前的局面。 其中&#xff0c;软件开发作为数字化转型的核心环节&#xff0c;其复杂…

工控屏(触摸屏)怎么连接电脑

一、使用USB接口连接 连接方法&#xff1a;使用USB线连接触摸屏和电脑&#xff0c;触摸屏会自动识别并连接到电脑上。 二、使用HDMI接口连接 连接方法&#xff1a;1.首先要确认您的触摸屏是否有HDMI接口&#xff1b;2.将一端连接到触摸屏&#xff0c;另一端连接到电脑&#…

为什么Facebook Marketplace无法使用?如何解决?

Facebook Marketplace是一个允许用户买卖商品的平台&#xff0c;由于其在Facebook内的便捷性&#xff0c;它逐渐成为了一个受欢迎的在线交易市场。然而&#xff0c;做Facebook跨境电商&#xff0c;很多人会面临的情况就是无法使用Facebook Marketplace。这到底是什么原因&#…

SQL学习小记(三)

SQL学习小记&#xff08;三&#xff09; 功能实现思路代码部分名词解释 代码打包为可执行文件 功能说明&#xff1a;使用python代码&#xff0c;将数据库database1中的表格table1同步到数据库database2中 功能实现 思路 #mermaid-svg-R1pWrEWA799M299a {font-family:"tre…

19.单目测距原理介绍

文章目录 相机成像模型的再次介绍单目测距的几何原理reference 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 根据相机成像的原理&#xff0c;在满足一定约束条件下&#xff0c;理论上是可以根据目标点的像素坐标计算出其对应的深度信息…

文献解读-群体基因组第一期|《对BMI的影响:探究BMI的基因型-环境效应》

关键词&#xff1a;应用遗传流行病学&#xff1b;群体测序&#xff1b;群体基因组&#xff1b;基因组变异检测&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;The Impact of ACEs on BMI: An Investigation of the Genotype-Environment Effects of BMI标…

python Windows电脑设置定时启动程序,定时运行代码

Windows设置定时 一&#xff0c;新建文件txt, .txt改为.bat 路径填exe的路径D:\test\main.py 如下是启动exe,如果运行python代码则写入如&#xff1a;python D:\test\main.py 二&#xff0c;搜索计算机管理 三&#xff0c;点击创建基本任务 填写任意名称 选择什么时候开始…

“智能体时代:探索无限可能——零代码构建智能教练智能体“

随着智能体技术的飞速发展&#xff0c;各个领域正经历着空前的变革和新的发展机遇。作为人工智能的一个关键组成部分&#xff0c;智能体以其自我驱动、智能响应和适应能力&#xff0c;逐渐深入到我们日常生活的各个层面&#xff0c;成为促进社会发展和科技进步的新引擎。 顺应这…

adb获取包名和界面名

adb获取包名和界面名 mac adb shell dumpsys window windows | grep mFocusedApp windows adb shell dumpsys window windows | findstr mFocusedApp 这个是在当前手机打开哪个界面获取的就是哪个界面的包名与界面 注意第一次连接时会有提示&#xff0c;需要连接两次才可以 …

免费,Python蓝桥杯等级考试真题--第15级(含答案解析和代码)

Python蓝桥杯等级考试真题–第15级 一、 选择题 答案&#xff1a;B 答案&#xff1a;D 解析&#xff1a;集合的并集运算有两种方式&#xff0c;一种是使用“|”运算符进行操作&#xff0c;另一种是使用union()方法来实现&#xff0c;故答案为D。 答案&#xff1a;A 解析&…

20212313 2023-2024-2 《移动平台开发与实践》第5次作业

20212313 2023-2024-2 《移动平台开发与实践》第5次作业 1.实验内容 设计并开发一个地图应用系统。 该实验需提前申请百度API Key&#xff0c;调用接口实现百度地图的定位功能、地图添加覆盖物和显示文本信息。 2.实验过程 2.1 获取SHA1 &#xff08;1&#xff09;打开控制台…

全网首发!精选32个最新计算机毕设实战项目(附源码),拿走就用!

Hi 大家好&#xff0c;马上毕业季又要开始了&#xff0c;陆陆续续又要准备毕业设计了&#xff0c;有些学生轻而易举就搞定了&#xff0c;有些学生压根没有思路怎么做&#xff0c;可能是因为技术问题&#xff0c;也可能是因为经验问题。 计算机毕业相关的设计最近几年类型比较多…

K8s的CRI机制是什么?

1. 概述 进入 K8s 的世界&#xff0c;会发现有很多方便扩展的 Interface&#xff0c;包括 CRI, CSI, CNI 等&#xff0c;将这些接口抽象出来&#xff0c;是为了更好的提供开放、扩展、规范等能力。 K8s CRI(Container Runtime Interface) 是 K8s 定义的一组与容器运行时进行交…