今日头条安装包优化策略与操作

今日头条安装包优化策略与操作

前言

自2016年起,今日头条开始关注其iOS端应用的安装包大致难题,启动了包大致优化规划。在经过多年的探索与操作后,今日头条不仅提高了包大致的优化效率,还取得了显著的成果。这篇文章小编将围绕“今日头条安装”这个主题,详细介绍在安装包优化经过中所采取的具体策略与取得的成果,旨在为同行业者提供借鉴与思索。

一、安装包的构成

对于每一个iOS应用来说,安装包的组成主要包含资源文件与可执行文件。通过构建后,我们获得的ipa文件经过解压后,会在.app文件中找到下面内容内容:

1. 资源文件:主要是图像、音频等。以Assets.car文件为代表,它是iOS Asset Catalog的构建产物。
2. Mach-O文件:Mach-O文件是iOS上的可执行文件,经过编译与链接后生成,通常占据安装包的绝大部分空间。

1.1 Assets.car 文件

Assets.car文件是由Xcode构建的,包含了应用中的所有资源。在优化经过中,我们使用了actool(Asset Catalog Tool)对其中的png图片进行重新编码,从而大幅压缩文件大致。

1.2 Mach-O文件

Mach-O文件是包含应用代码的二进制文件。使用工具分析Mach-O文件能帮助我们了解其构成,进而对其进行更有效的优化。

二、资源文件优化

在包大致优化方面,资源文件的压缩无疑是一种有效的手段。今日头条在此方面进行了多种尝试。

2.1 调整资源压缩配置

在过去,大多数Pod库的最低支持版本仍停留在iOS 8.0,这对Assets.car的构建造成了影响。通过将Pod库和主工程的最低支持版本提升至iOS 9,并开启相应的优化选项,我们成功实现了包大致的显著减少,取得了2.31MB的优化效果。

2.2 RGB with Palette压缩

在对Asset Catalog中PNG图片进行压缩时,我们尝试采用了新的RGB with palette编码方式。这种技巧通过维护一个颜色数组来降低图片的尺寸,特别适合那些颜色接近的扁平风格图标。经过实验证明,这一技巧带来了3.15MB的优化效果。

2.3 合并Assets.car文件

由于使用CocoaPods集成组件,今日头条应用内携带了多个Assets.car文件。通过在构建经过中合并多个Assets.car文件,优化了图片的加载效率,并减少了包的整体大致,最终实现了2.1MB的优化效果。

2.4 文这篇文章小编将件压缩

除了图片,应用中还存在众多文这篇文章小编将件(如JSON、HTML等)。通过在构建阶段对这些文件进行压缩,并在App启动时解压,我们在Lottie动画的JSON文件中成功实现了400KB的优化效果。

三、Mach-O文件优化

Mach-O文件是今日头条安装包中最重要的组成部分,占据了安装包85%左右的体积,优化其大致是必要的措施。

3.1 使用-Oz编译参数

Xcode 11新增的-Oz编译参数能够对重复的机器指令进行优化,从而减少文件大致。经过评估后,我们对大部分源代码应用这一参数,取得了4MB以上的文件大致降低。

3.2 链接时优化(LTO)

链接时优化可以在编译与链接阶段的经过中进行,能够有效缩小文件体积。今日头条同时开启了增量LTO,最终实现了6.5MB的大致减免。

3.3 精简导出符号配置

对Mach-O中不必要的符号进行过滤,设置EXPORTED_SYMBOLS_FILE以精简导出符号,缩减包大致的同时能有效提高逆向难度。经过该优化,包的大致减少了2.1MB。

3.4 属性动态化

OC中的属性会占用一定的大致,通过使用@dynamic修饰符,不生成成员变量及其set/get技巧,我们在大量JSONModel子类中节省了800KB的包大致。

3.5 __TEXT段迁移技术

通过将__TEXT段迁移到__BD_TEXT段,可以减少可执行文件的加密范围,从而提升文件的压缩效率,最终成功减少了60MB的Download Size。

3.6 二进制段压缩

通过对Mach-O文件中不立即需要的段进行压缩,并在需要时才解压,这一技巧的实施为我们带来了3.5MB的优化效果。

四、拓展资料

怎样样?经过上面的分析的技巧与操作,今日头条在不断迭代的经过中成功优化了安装包的大致。面对日益复杂的技术要求,我们不仅要有精深的技术能力,还需要各方的通力合作。在此,我们呼吁对技术充满热诚的朋友加入我们的团队,共同探索和创造,为数亿用户带来更好的使用体验。

五、加入我们

如果你对技术充满渴望,愿意在优化与技术攻坚中追求极点,欢迎加入今日头条的iOS团队,与我们一起开创更杰出的未来。我们在北京、深圳均有招聘需求,简历投递邮箱:tech@bytedance.com,深入了解格式为“姓名 &8211; 职业年限 &8211; 今日头条 &8211; 平台架构 &8211; iOS/Android”。期待你的加入与共同成长!