跳到主要内容

编译与打包流程

首次完整编译​

1. 配置并编译Longan​

cd <ANDROID_TOP>/longan
./build.sh config
./build.sh

Android 固件必须在 Longan config 阶段选择 android 平台。Linux 与 Android 可能使用不同工具链和打包配置,不要使用 Linux 配置生成 Android 固件。

2. 选择Android产品​

cd <ANDROID_TOP>
source build/envsetup.sh
lunch <PRODUCT>-userdebug

3. 编译Android​

make -j16

4. 打包​

全志 Android 13 常见方式:

pack

生成调试固件:

pack -d

安全固件参数和脚本随项目配置变化,先检查:

pack --help 2>/dev/null || true
build --help 2>/dev/null || true

部分分支也可使用:

build -lap -j16
build -lapd -j16

参数含义必须以当前 build --help 为准。

只修改内核或设备树​

cd <ANDROID_TOP>/longan
./build.sh kernel

之后根据分支选择:

cd <ANDROID_TOP>
source build/envsetup.sh
lunch <PRODUCT>-userdebug
pack

部分项目支持 Longan 无源码打包:

cd <ANDROID_TOP>/longan
./build.sh
./build.sh pack

这依赖 pack hook 和预置 Android 镜像,不能假设所有分支都支持。通过下面命令确认:

grep '^LICHEE_PACK_HOOK=' .buildconfig
ls -l build/hook/pack 2>/dev/null

只修改U-Boot​

cd <ANDROID_TOP>/longan
./build.sh bootloader

然后重新执行对应打包流程。

只修改Android模块​

cd <ANDROID_TOP>
source build/envsetup.sh
lunch <PRODUCT>-userdebug
m <模块名> -j16

可通过 adb install -r 或 adb push 快速验证,也可以重新打包完整固件。

输出确认​

Longan输出​

cd <ANDROID_TOP>/longan
find out -type f \
\( -name '*.dtb' -o -name '*.ko' -o -name 'vmlinux' -o -name '*.img' \) \
-print | sort

Android输出​

cd <ANDROID_TOP>
source build/envsetup.sh
lunch <PRODUCT>-userdebug

echo "$OUT"
find "$OUT" -maxdepth 2 -type f \
\( -name '*.img' -o -name '*.apk' \) \
-print | head -100

最终全志固件​

find <ANDROID_TOP> -type f -name '*.img' -mmin -30 -print

通过修改时间、文件大小和打包日志确认使用的是本次生成的固件。

常见清理方式​

Longan:

cd <ANDROID_TOP>/longan
./build.sh clean

Android 单模块:

m clean-<模块名>

Android 全量输出很大,删除 out/ 前必须确认没有需要保留的编译产物。不要把清理作为所有编译问题的第一处理方式,应先保留完整报错并定位失败模块。