博客
关于我
深度剖析 | 阿里热修复如何精简优化补丁资源?
阅读量:103 次
发布时间:2019-02-26

本文共 1354 字,大约阅读时间需要 4 分钟。

资源修复中的资源优化

近年来,阿里推出的Sophix热修复技术在Android开发者中引发了广泛关注。这款非侵入式的移动热更新解决方案,不仅实现了对代码、资源、动态库等多维度的修复支持,更在资源优化方面取得了显著进展。本文将深入探讨Sophix热修复技术中资源修复的优化之路。

自去年推出以来,Sophix已吸引了数以万计的开发者接入。其接入门槛低、操作流畅且资源占用极小,成为开发者修复痛点的理想选择。目前,我们在资源修复领域持续进行优化,特别是在资源补丁的精简方面取得了重要突破。

资源补丁的精简优化主要体现在以下几个方面:

  • 兼容最新版本:支持兼容最新的Android P dp3版本,确保在最新系统环境下稳定运行。

  • JIT混合编译兼容:优化JIT(Just-In-Time)混合编译机制,提升性能和兼容性。

  • 第三方加固全面兼容:完善对第三方加固框架的支持,确保所有兼容性场景得到覆盖。

  • 新增稳健接入方式:提供多样化的接入方式,满足不同开发者的需求。

  • 三星低版本支持:针对三星低版本机型进行专门优化,解决特定设备的兼容问题。

  • 资源补丁加速与初始化检查:优化补丁生成工具,提升修复效率,同时增加对初始化状态的检查,减少潜在问题。

  • 资源补丁深度优化:针对资源文件(如resources.arsc)进行深度优化,实现更小的资源包尺寸和更高的性能效率。

  • 资源补丁的优化离不开对arsc文件结构的深入理解。arsc文件作为Android资源表中存储的资源文件,其结构复杂但又具有特定的规律。文件开头通常包含ResTable_header结构头,指定了文件中包含的其他结构,包括全局字符串池和其他包资源块。在默认编译环境下,通常只有一个包(包id为0x7f),其下的资源编号均为0x7fXXXXXX。

    arsc文件中的字符串池分为两种类型:类型字符串池和资源项字符串池。类型字符串池主要存储资源类型对应的名称(如layout、string等),而资源项字符串池则存储键值对,键对应资源项的id,值对应资源值。全局字符串池存储的是资源值的具体字符串内容。

    以下是资源优化的具体实现步骤:

  • 确定要留下的字符串:收集所有补丁资源中使用的字符串,包括键字符串和值字符串。通过比较新包和旧包,确定哪些字符串是新增或修改的。

  • 重新编排字符串:对收集到的字符串进行重新编排,使其紧凑对齐,并重新计算偏移值。同时,调整样式字符串的位置,确保样式表与字符串池的对应关系正确。

  • 修正资源引用:对资源中使用到这些字符串的地方进行索引修正。确保ResTable_entry和Res_value中的Ref字段值与实际字符串池中的索引值一致。

  • 通过上述优化步骤,我们实现了资源补丁的精简。具体效果如下:

    • 字符串池优化:通过精简字符串池,显著减少了资源文件的体积。
    • 性能提升:优化后的资源文件加载速度更快,运行时性能更优。
    • 兼容性增强:优化过程中解决了多个兼容性问题,提升了系统稳定性。

    值得注意的是,资源池优化不仅涉及字符串部分,还需处理样式字符串。样式字符串的位置和顺序会影响资源编译结果,因此在优化过程中需细致处理样式表的编排。

    未来,我们将继续深化资源修复技术的研究,探索更多优化点和更高效的解决方案,以满足开发者对热修复功能的更高需求。

    转载地址:http://jcky.baihongyu.com/

    你可能感兴趣的文章
    postman进行http接口测试
    查看>>
    Postman高阶技能:Collection集合批量运行!
    查看>>
    postMessage跨标签页共享数据
    查看>>
    QImage对一般图像的处理
    查看>>
    post为什么会发送两次请求?
    查看>>
    Post表单提交TextArea的值出现转译乱码问题 - Spring MVC处理表单提交
    查看>>
    Power BI 中的 Python 可视化需要什么设置?任何特定的 matplotlib 包版本或系统设置?
    查看>>
    Power BI:如何在 Power Query 编辑器中将 Python 与多个表一起使用?
    查看>>
    power english (3) main text -emotion mastery - focus
    查看>>
    POWER ENGLISH (6) - MODEL
    查看>>
    power english (1) —— passion
    查看>>
    Power English (1) 原文
    查看>>
    power English (3)原文
    查看>>
    POWER ENGLISH(7)- repetition
    查看>>
    SpringBoot中集成SpringBatch详细解析与实战示例(CSV文件读取十万条数据进行业务处理后写入Mysql数据库)
    查看>>
    powerbi 一张表在另外一张表中出现的数量_PowerBi之初步学习笔记
    查看>>
    QGIS怎样设置简体中文以及新建可编辑的多边形的图层
    查看>>
    PowerBuilder 使用自定义事件触发键盘Enter事件
    查看>>
    PowerCreatorCMS UploadResourcePic 任意文件上传漏洞复现
    查看>>
    PowerDesigner 使用的一些技巧(转)
    查看>>