2. 全量包制作环境搭建

说实话,做全量包制作,环境搭建这一步看着简单,但坑不少。我见过太多人一上来就急着写脚本,结果被工具链的版本问题卡住半天。咱们先把地基打牢,后面才走得稳。

2.1 为什么选 Linux?

你可能要问:Windows 不行吗?嗯,理论上可以,但实操中你会遇到各种编码问题、路径分隔符问题、还有签名工具兼容性问题。我个人习惯用 Ubuntu 20.04 LTS 或 CentOS 7+,这两个发行版在 Android 生态里支持最好。

核心原则:全量包制作环境必须与目标系统保持一致。比如你的设备跑的是 Android 10,那编译和打包环境最好也用对应的 Linux 内核版本。

2.2 必要工具链安装

咱们需要的东西不多,但每个都不能少。我列个清单,你照着装就行。

工具 用途 安装命令 (Ubuntu/Debian) 安装命令 (CentOS/RHEL)
zip 压缩打包 sudo apt install zip sudo yum install zip
unzip 解压校验 sudo apt install unzip sudo yum install unzip
openssl 签名与哈希计算 sudo apt install openssl sudo yum install openssl
rsync 增量同步与校验 sudo apt install rsync sudo yum install rsync

我的小习惯:装完后跑一遍 zip --version && unzip --version && openssl version && rsync --version,确认版本号都正常。我曾经在 CentOS 6 上遇到过 openssl 版本太老,导致签名算法不兼容的问题,折腾了一下午。

2.3 构建目录结构设计

目录结构这事,看着是小事,但直接影响后续脚本的可维护性。我建议你按照「输入-处理-输出」的逻辑来组织。

ota_workspace/
├── input/                  # 原始固件存放
│   ├── source_ota.zip      # 基础版本全量包
│   └── target_ota.zip      # 目标版本全量包
├── output/                 # 生成的增量包
│   ├── incremental_patch.zip
│   └── full_package.zip
├── tools/                  # 工具脚本与签名密钥
│   ├── sign.sh
│   ├── verify.sh
│   └── keys/
│       ├── release_key.pk8
│       └── release_key.x509.pem
├── temp/                   # 临时解压目录(可清理)
│   ├── source/
│   └── target/
└── config/                 # 配置文件
    └── build_config.ini

这个结构我用了好几年,基本没大改过。你想想看,每个目录的职责很清楚:input 只管放原材料,output 只管收成品,temp 用完就删,不会污染其他目录。

注意:temp 目录一定要放在工作区内部,不要用 /tmp。为什么?因为 /tmp 可能被系统定时清理,你跑了一半的打包任务突然发现文件没了……嗯,我吃过这个亏。

2.4 环境验证脚本

装完工具、建好目录,我建议你写一个快速验证脚本。每次换机器或者重装系统后,跑一遍就能确认环境是否就绪。

#!/bin/bash
# check_env.sh - 环境验证脚本

echo "=== 工具链版本检查 ==="
echo "zip: $(zip --version 2>&1 | head -n 1)"
echo "unzip: $(unzip --version 2>&1 | head -n 1)"
echo "openssl: $(openssl version)"
echo "rsync: $(rsync --version 2>&1 | head -n 1)"

echo ""
echo "=== 目录结构检查 ==="
BASE_DIR="ota_workspace"
for dir in input output tools temp config; do
    if [ -d "$BASE_DIR/$dir" ]; then
        echo "[OK] $BASE_DIR/$dir"
    else
        echo "[MISS] $BASE_DIR/$dir"
    fi
done

echo ""
echo "=== 签名密钥检查 ==="
if [ -f "ota_workspace/tools/keys/release_key.pk8" ]; then
    echo "[OK] 私钥存在"
else
    echo "[WARN] 私钥未找到,请后续生成"
fi

这个脚本我每次搭建新环境都会跑一遍。说白了,就是给自己省点排查时间。

2.5 知识结构总览

下面这张图把本章的核心逻辑串起来了。你可以把它当作一个快速索引。

全量包制作环境搭建知识结构 全量包制作环境搭建知识结构 环境搭建 Linux 环境准备 工具链安装 目录结构设计 Ubuntu 20.04 / CentOS 7+ 内核版本与目标系统一致 zip / unzip / openssl / rsync 版本兼容性检查 input / output / tools / temp / config 输入-处理-输出 逻辑 环境搭建是基础,工具链版本和目录结构直接影响后续打包效率 建议每次换机器后先跑验证脚本

2.6 避坑指南

最后,分享几个我踩过的坑,你遇到了可以直接跳过。

  • openssl 版本太老:我曾经在 CentOS 6 上默认装的是 1.0.1,结果签名算法不支持 SHA256-RSA,折腾了半天才发现。建议用 1.1.1 以上版本。
  • zip 中文乱码:如果固件文件名包含中文,记得设置 export LANG=en_US.UTF-8,否则解压出来全是乱码。
  • rsync 权限问题:用 rsync 同步大文件时,加上 --partial 参数,这样断网了还能续传,不用从头再来。
  • temp 目录磁盘空间:全量包解压后可能占用 10GB+,确保 temp 所在分区有足够空间。我建议至少预留 20GB。

一句话总结:环境搭建别图快,工具版本和目录结构搞对了,后面写脚本就是水到渠成的事。