我正在为我的自定义 Android 10 版本构建 OTA 更新,如下所示:
./build/make/tools/releasetools/ota_from_target_files \
--output_metadata_path metadata.txt \
target-files.zip \
ota.zip
可以根据 update_engine_client 的 android 文档,通过提取 Payload.bin 和 Payload_properties.txt 来应用生成的 ota.zip。
update_engine_client --payload=file:///<wherever>/paypload.bin \
--update \
--headers=<Contents of payload_properties.txt>
这一切都有效,所以我从这个结果中非常确定我已经正确创建了 OTA,但是,我希望能够下载元数据并验证有效负载是否可以应用,然后再让客户端下载整个内容有效负载。
查看 update_engine_client --help 选项,似乎可以按如下方式验证元数据:
update_engine_client --verify --metadata=<path to metadata.txt from above>
这就是我未能达到预期结果的地方。 我收到一条错误消息,表示无法解析有效负载标头。 它失败了,当我阅读源代码时,
kDownloadInvalidMetadataMagicString
似乎是元数据的前 4 个字节。 显然我创建的metadata.txt不适合验证工具。
因此,我希望有人能够为我指明正确的方向,以正确生成元数据或告诉我如何正确使用该工具。
原来 ota 工具生成的元数据是人类可读的格式。 verify 方法需要一个二进制文件。该文件不是作为唯一文件的 zip 内容的一部分。相反,它被添加到payload.bin 的前面。 所以payload.bin的第一个字节实际上是payload_metadata.bin,这些字节将与update_engine_client的verify方法正确配合来确定payload是否适用。
我正在将 Payload_metadata.bin 提取到 makefile 中,如下所示:
$(DEST)/%.meta: $(DEST)/%.zip
unzip $< -d /tmp META-INF/com/android/metadata
python -c 'import re; meta=open("/tmp/META-INF/com/android/metadata").read(); \
m=re.match(".*payload_metadata.bin:([0-9]*):([0-9]*)", meta); \
s=int(m.groups()[0]); l=int(m.groups()[1]); \
z=open("$<","rb").read(); \
open("$@","wb").write(z[s:s+l])'
rm -rf /tmp/META-INF
在此输入图片描述 https://www.instagram.com/ceaespirituferdinand?igsh=M3liZTdwbWkxNWg4
费迪南德·埃斯皮里图·塞亚 1736823233292.pdf