从LineageOS安装zip文件中提取专有blobs

下载 LineageOS 最新安装zip文件
mkdir ~/android/system_dump/
cd ~/android/system_dump/
wget https://mirrorbits.lineageos.org/full/flame/20231026/lineage-20.0-20231026-nightly-flame-signed.zip

我不太确定下载的安装包zip是 Extracting proprietary blobs from LineageOS zip files 哪种类型的zip,不过我看到这个zip文件解压缩后有 payload_properties.txtpayload.bin ,所以我推测为需要 Extracting proprietary blobs from payload-based OTAs

  • 安装 payload.bin (这个文件有 1.1G 大小)解压缩工具:

安装 payload.bin 解压缩工具
apt-get install python3-protobuf

备注

python3-protobuf 这个模块是用来处理 Protocol Buffers (Protobuf) (Google的数据交换格式),这个数据格式通过二进制方式可以极大提升数据交换性能

  • 创建使用 payload.bin 解压缩工具所需的repo仓库:

clone payload.bin 解压缩工具使用的repos
git clone https://github.com/LineageOS/android_tools_extract-utils android/tools/extract-utils
git clone https://github.com/LineageOS/android_system_update_engine android/system/update_engine
  • lineage-*.zip 文件的 payload.bin 中提取 .img 文件:

lineage-*.zip 文件的 payload.bin 中提取 .img 文件
python3 ~/android/tools/extract-utils/extract_ota.py lineage-20.0-20231026-nightly-flame-signed.zip
  • 提取后在当前目录下会有如下 .img 文件需要挂载到 system 目录下:

将提取的 .img 文件挂载到 system 目录下
mkdir system/
sudo mount -o ro system.img system/
sudo mount -o ro vendor.img system/vendor/
# 这个 odm.img 没有找到
sudo mount -o ro odm.img system/odm/
sudo mount -o ro product.img system/product/
sudo mount -o ro system_ext.img system/system_ext/
  • 然后执行 extract-files.sh 提取 blobs:

通过 payload.bin 解压缩的镜像挂载后提取blobs
~/android/lineage/device/google/flame/extract-files.sh ~/android/system_dump/

上述命令会指示 extract-files.sh 脚本从指定目录下挂载的 system dump 提取 blobs ,而不是连接的设备

  • 完成后就可以移除挂载并删除不需要的文件:

移除挂载并删除不需要的文件
sudo umount -R ~/android/system_dump/system/
rm -rf ~/android/system_dump/

参考