前言
最近有业务需求,需要向已经打包的APK里面注入渠道(channel)信息,方便APK下载安装之后进行渠道归因。向APK里面注入渠道信息已经有比较成熟的方案美团walle。walle的强大和实现原理本文不再赘述。为了理解walle的代码,并且在出现异常case的时候,能够自己解决。必须要对APK文件的结构了如指掌。
因此,本文的目的就是以一个简单的利用walle向APK里面注入渠道号为例。带你了解APK里面的各种细节,相信读者在看完此篇文章之后,再阅读walle的代码的时候一定豁然开朗。
ZIP和APK文件格式概览
ZIP文件格式概览
APK文件本质上是一个ZIP文件,因此在了解APK的格式之前必须先了解ZIP文件的格式。详情参见zip文件格式详解 。
ZIP文件的整体格式如下图所示,主要由三部分组成
数据区(Contents of ZIP entries):存储文件压缩内容
中央目录区(Central Directory Header):存储zip文件里面包含的所有目录
中央目录结尾记录(End of Central Directory Record:ECDR):存储zip文件的整体信息
其中,中央目录结尾记录对于理解本文最为重要。最好看完zip文件格式详解 再继续往下阅读。此区域里面有一个值核心目录偏移地址非常的重要,以下图为例的话,核心目录的起始地址就是0x2D(注意: