开发者社区 问答 正文

应用研发平台EMAS补丁回滚,需要重启app吗?还是直接生效?

应用研发平台EMAS补丁回滚,需要重启app吗?还是直接生效?

展开
收起
真的很搞笑 2024-04-10 08:40:16 71 分享 版权
阿里云 AI 助理回答

在应用研发平台 EMAS 中,补丁回滚是否需要重启 App 取决于具体的补丁类型和代码变动情况。以下是详细解答:


1. 补丁回滚的生效机制

根据知识库中的描述,补丁的生效方式分为两种:即时生效(热启动)冷启动修复

  • 即时生效(热启动)
    如果补丁回滚涉及的代码改动较小(例如方法体内的修改、不涉及新增方法或资源变更),则可以通过热启动方式直接生效,无需重启 App。

  • 冷启动修复
    如果补丁回滚涉及较大的代码改动(例如新增方法、修改 so 文件、资源文件变更等),则需要通过冷启动方式修复,即必须重启 App 才能生效。


2. 具体场景分析

以下是补丁回滚时可能遇到的具体场景及对应的生效方式:

场景一:首次加载补丁

  • 如果当前 App 尚未加载任何补丁,此时回滚操作会触发 queryAndLoadNewPatch 方法。
  • 对于即时生效的热修复,补丁会立即应用;对于强制冷启动的修复,则需要重启 App 后才能生效。

场景二:已有补丁正在运行

  • 无资源改动的补丁
    如果当前已加载的补丁不包含资源改动,回滚后通常需要 两次重启

    1. 第一次重启:完成新补丁的下载和预加载。
    2. 第二次重启:新补丁正式生效。
  • 有资源改动的补丁
    如果当前已加载的补丁包含资源改动,回滚后通常需要 三次重启

    1. 第一次重启:检测到新补丁并确保老补丁运行时资源查找正常。
    2. 第二次重启:删除老补丁并完成新补丁的下载和预加载。
    3. 第三次重启:新补丁正式生效。

场景三:自 Sophix 3.1.5 版本之后

  • 在 Sophix 3.15 及更高版本中,如果已有补丁正在运行且拉取到新补丁,一次重启后即可生效,无论补丁是否包含资源改动。

3. 重要提醒

  • 补丁加载时机
    补丁的加载时机取决于 queryAndLoadNewPatch 方法的调用时间。建议在 App 运行过程中定期调用该方法,以提前查询和预加载新补丁,从而减少重启次数。

  • 强制冷启动选项
    如果对稳定性有极高要求,可以开启强制冷启动选项。这样,无论补丁的代码变动大小如何,都会按照冷启动方式打包和生效。

  • 初始化注意事项
    Sophix 的初始化代码应尽可能早地调用,推荐在 Application.attachBaseContext() 方法中进行初始化。如果初始化过晚(如在 onCreate 中),可能会导致补丁加载失败或崩溃。


4. 总结

  • 即时生效:适用于代码改动较小的补丁回滚,无需重启 App。
  • 冷启动修复:适用于代码改动较大或涉及资源改动的补丁回滚,需重启 App 生效。
  • 特殊情况:自 Sophix 3.1.5 版本起,已有补丁情况下拉取新补丁,一次重启后即可生效。

建议开发者根据实际需求选择合适的补丁回滚策略,并在发布前进行全面测试,以确保补丁的稳定性和兼容性

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
收录在圈子:
基于阿里巴巴以及合作伙伴的最佳实践,围绕大前端、云原生领域的相关技术热点(小程序、Serverless、应用中间件、低代码、DevOps)展开行业探讨,与开发者一起探寻云原生时代应用研发的新范式。
还有其他疑问?
咨询AI助理