博客
关于我
深度剖析 | 阿里热修复如何精简优化补丁资源?
阅读量: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/

    你可能感兴趣的文章
    Position属性四个值:static、fixed、absolute和relative的区别和用法
    查看>>
    POSIX thread编程中关于临界区内条件变量的分析
    查看>>
    POSIX与程序可移植性
    查看>>
    posix多线程有感--自旋锁
    查看>>
    SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)
    查看>>
    POSIX标准和XSI扩展
    查看>>
    post install error,please remove node_moules before retry
    查看>>
    postcss-pxtorem 参数之selectorBlackList、exclude的用法
    查看>>
    Postek博思得标签打印机更换电脑,打印出来标签空白
    查看>>
    postfix+ dovecot搭建邮件服务器
    查看>>
    postfix在邮件服务器中的使用
    查看>>
    PostGIS 3.1.2软件安装详细教程(地图工具篇.8)
    查看>>
    PostGIS中获取所有EPSG的编码以及对应Proj4字符串
    查看>>
    SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)
    查看>>
    PostGIS在Windows上的下载与安装
    查看>>
    Qt开发——网络编程之UDP客户端
    查看>>
    postgis数据库优化_postgresql 性能优化
    查看>>
    postgis求面积、交集等相关函数
    查看>>
    postgis相关函数
    查看>>
    Postgres Docker版本安装mysql_fdw 插件
    查看>>