开发者社区 问答 正文

应用研发平台EMAS中热修复可以修复什么资源?

应用研发平台EMAS中热修复可以修复什么资源?

展开
收起
十一0204 2023-12-12 22:36:50 43 分享 版权
阿里云 AI 助理回答

在应用研发平台EMAS中,热修复功能可以修复以下资源和内容:

1. 支持的修复范围

热修复主要支持以下三类内容的修复: - Java代码:可以修复存量功能中的错误问题或对现有功能进行调整。但不支持新增功能。 - 资源文件:支持对资源文件的修复,但存在一些限制(详见下文)。 - so文件:支持对动态链接库(so文件)的修复。

2. 资源文件的修复限制

尽管热修复支持资源文件的修复,但并非所有资源都可以被修复,具体限制如下: - 支持修复的资源: - 普通资源文件(如布局文件、图片资源等)。 - 不支持修复的资源: - AndroidManifest.xml中的资源:由于该文件由系统在安装时解析,运行时无法修改。 - 通知栏图标:如果通知栏图标发生变动,可能导致推送通知时因找不到资源而崩溃。 - 启动图标资源:启动图标属于安装包资源,无法通过补丁包修复。 - RemoteViews:这类资源由系统负责展示,无法从补丁包中加载。 - 通过getResources().getIdentifier()方式调用的资源:这类资源的加载路径固定为安装包,无法指向补丁包。

3. 特殊情况说明

  • 冷启动加载限制
    • 如果是冷启动加载(大多数情况),调用SophixManager.initialize所在的类无法被修复。因此,建议将初始化逻辑放在单独的StubApplication类中,以避免此类问题。
  • 四大组件的新增或修改
    • AndroidManifest.xml中的四大组件(Activity、Service、BroadcastReceiver、ContentProvider)及其相关配置(如主题资源)无法通过热修复进行新增或修改。开发者可以通过预先预留空组件的方式规避此限制。

4. 其他注意事项

  • 补丁大小限制:默认支持的补丁包大小为30M以内。
  • 加固和混淆的影响
    • 已加固的APK可能遇到类加载失败的问题,建议在加固前打补丁并进行全面测试。
    • 混淆与加固不同,混淆可能包含特殊处理,需确保新旧包混淆一致。

总结

热修复功能可以修复Java代码、普通资源文件和so文件,但对于特定资源(如通知栏图标、启动图标、RemoteViews等)以及AndroidManifest.xml中的内容存在限制。开发者在使用热修复时需注意这些限制,并根据实际情况调整开发和发布策略。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答