前言
之前在kvm虚拟机编译安卓,但是由于qemu虚拟磁盘的特性,最终磁盘文件大小已经大于设置的磁盘文件的最大容量,然后盘就满了
kvm虚拟机就直接暂停了,也没法使用其他Linux的livecd,一挂载也会暂停
使用各种办法挽救,速度忒慢,索性直接重建环境,比那些操作快,毕竟没什么重要文件
本篇算是一个笔记,给自己记录,方便以后使用
环境介绍
系统: ubuntu 24.04 LTS
示例系统源码: Avium16
更换源与更新系统
此处默认已进行更换,如果没有,更换源在镜像站一般都有教程
推荐两个清华源和中科大源
更新系统:
1 | sudo apt update && sudo apt upgrade |
安装依赖
在这解释一下各个包,基础列表来自安卓官方文档1和安卓官方文档2
然后是做出的修改,修正找不到包的问题,包括git-core,libncurses5和lib32ncurses5-dev,由于ubuntu已经占不到这些包了,所以替换成git,libncurses6和lib32ncurses-dev
然后是同步源码的工具repo,不需要手动设置PATH来用,源里有,就是deb系的似乎更新比较慢,会报版本不是最新的警告,其他的发行版没见过有这个
ccache这个在build/envsetup.sh没定义或手动启用是不会自动开的,介于大多类原生的编译脚本里有,所以也带了
然后是构建内核需要用的的包libssl-dev,解决编译内核时提示<openssl/bio.h>缺失的问题
git-lfs这个在部分仓库需要用到,缺少可能会导致部分依赖它同步的文件打开后显示lfs信息。而不是本体文件
1 | sudo apt install git gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses6 lib32ncurses-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig libssl-dev openjdk-8-jdk repo ccache git-lfs libelf-dev rsync |
设置git信息
源码同步会提示要求设置git的信息,这里就不多说了,直接设置一下就行
1 | git config --global user.email 你的GITHUB邮箱(或其他?) |
初始化repo同步清单
首先,创建一个文件夹用来存放源码,然后进入这个文件夹,比如我这叫android
1 | mkdir android && cd android |
接着设置repo的下载地址,默认是被墙的谷歌源,我们可以替换为清华大学的git-repo源
1 | export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' |
接着就是初始化repo,比如我这里同步AviumUI源码,可以执行这条命令。
这里https://github.com/AviunUI/android_manifests是清单地址,在前面加上https://gh-proxy.com/以使用国内加速,也可以自建
结尾加上--depth=1设置克隆深度为1,减少不必要的空间占用
1 | repo init -u https://gh-proxy.com/https://github.com/AviumUI/android_manifests -b avium-16 --git-lfs --depth=1 |
如果是AOSP官方源码或者lineages源码,可以使用国内镜像源,教程参考清华源文档
修改清单指向加速源
使用你喜欢的编辑器编辑.repo/manifests文件夹,依次编辑default.xml和存在的其他.xml文件
对于https://github.com的链接,在链接最前面加上https://gh-proxy.com/
对于https://android.googlesource.com的链接,将链接更换为AOSP镜像源所要求的url
示例:
1 | <remote name="aosp" |
同步源码
这一步应该都会,因为大多数的清单里都会包含同步源码
此处为AviumUI的清单里的同步命令
1 | repo sync -c -j$(nproc --all) --force-sync --no-clone-bundle --no-tags |
-j后的线程数这个命令是默认按照CPU的核心数,但是按照镜像源的说法,比如这里的中科大源,请酌情设置线程数
由于硬盘 I/O 资源有限,Git 服务器每 IP 限制 5 个并发连接。 repo sync 命令默认使用 4 个并发连接,请勿使用 -j 参数增加并发连接数。
小脚本?
虽然设置完加速与镜像后,可以做到不开魔法也可以顺利克隆,但是如果你的网络实在不好,容易失败
这里有个简单的bash脚本可以帮助你自动重试,直到同步成功或手动退出
1 |
|
使用方法就是将脚本保存为repo_sync.sh,然后chmod +x repo_sync.sh,然后执行./repo_sync.sh即可
🌳获取设备树文件
注,此部分内容为2025-12-08追加
什么是树呢?树即描述设备情况的一些列文件,包括平台配置,内核,专有驱动等
用于告诉安卓构建系统有哪些要求,应该使用什么
由于AviumUI是完全兼容LineageOS的设备树的,所以这里以LineageOS设备树作为演示
tips: 设备树仓库一般以一定规律命名,如android_device_(oem)_(product)
设备描述device
这里以一加9R作为示例,它的设备厂商为oneplus,代号为lemonades
那么打开LineageOS组织的仓库 LineageOS
搜索lemonades, 将会看见它的代码仓库android_device_oneplus_lemonades
在主页,复制下来它的链接,然后回到安卓源码的目录克隆源码
1 | git clone https://github.com/LineageOS/android_device_oneplus_lemonades device/oneplus/lemonades |
等待克隆完成后进如目录,打开lineage.dependencies,这个文件包含其他需要获取的设备树文件(如果规范)
比如按照这里,还需要获取sm8250-common设备树文件,那么也需要克隆下来
与上次一样,目录就应该是device/oneplus/sm8250-common
这就是设备树仓库一般的命名方式
内核Kernel
如lineage.dependencies里列出,此处同样获取kernel源码
因为内核一般提交信息非常多,如果没有额外的维护需求,可以加上–depth=1减少下载的大小
1 | git clone https://github.com/lineageos/android_kernel_oneplus_sm8250 kernel/oneplus/sm8250 --depth=1 |
厂商私有文件vendor
LineageOS组织是没有vendor内容的,如果你翻阅lineageos wiki
它会告诉你让你从设备提取,但其实lineageos的vendor内容似乎保存在另一个地方
TheMuppets里面包含了LineageOS维护的设备的vendor文件
硬件特性hardware
都在LineageOS仓库,同设备树
初始化编译
首先确保使用的shell为bash,如果不是,请手动切换为bash
然后执行以下内容
1 | source build/envsetup.sh |
其中user是构建类型,bp2a是代表安卓16初始版本(qpr0)
lineage_lemonades是目标名称,这里定义在device/oneplus/lemonades/lineage_lemonades.mk文件
然后开始编译系统
1 | make bacon |


