banner
Hi my new friend!

使用Ubuntu搭建安卓构建环境

Scroll down

前言

之前在kvm虚拟机编译安卓,但是由于qemu虚拟磁盘的特性,最终磁盘文件大小已经大于设置的磁盘文件的最大容量,然后盘就满了

kvm虚拟机就直接暂停了,也没法使用其他Linux的livecd,一挂载也会暂停

使用各种办法挽救,速度忒慢,索性直接重建环境,比那些操作快,毕竟没什么重要文件

本篇算是一个笔记,给自己记录,方便以后使用

环境介绍

系统: ubuntu 24.04 LTS

示例系统源码: Avium16

更换源与更新系统

此处默认已进行更换,如果没有,更换源在镜像站一般都有教程
推荐两个清华源中科大源

更新系统:

1
sudo apt update && sudo apt upgrade

安装依赖

在这解释一下各个包,基础列表来自安卓官方文档1安卓官方文档2

然后是做出的修改,修正找不到包的问题,包括git-corelibncurses5lib32ncurses5-dev,由于ubuntu已经占不到这些包了,所以替换成gitlibncurses6lib32ncurses-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
2
git config --global user.email 你的GITHUB邮箱(或其他?)
git config --global user.name 你的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源码,可以使用国内镜像源,教程参考清华源文档

可用的源推荐清华源中科大源,不同之处就是替换url的问题

修改清单指向加速源

使用你喜欢的编辑器编辑.repo/manifests文件夹,依次编辑default.xml和存在的其他.xml文件

对于https://github.com的链接,在链接最前面加上https://gh-proxy.com/

对于https://android.googlesource.com的链接,将链接更换为AOSP镜像源所要求的url

示例:

1
2
3
4
5
6
7
8
9
10
<remote  name="aosp"
fetch="https://mirrors.ustc.edu.cn/aosp"/>

...

<remote name="avium"
fetch="https://gh-proxy.com/https://github.com/AviumUI/"
sync-c="true"
sync-j="4"
revision="refs/heads/avium-16" />

同步源码

这一步应该都会,因为大多数的清单里都会包含同步源码

此处为AviumUI的清单里的同步命令

1
repo sync -c -j$(nproc --all) --force-sync --no-clone-bundle --no-tags

-j后的线程数这个命令是默认按照CPU的核心数,但是按照镜像源的说法,比如这里的中科大源,请酌情设置线程数

WARNING

由于硬盘 I/O 资源有限,Git 服务器每 IP 限制 5 个并发连接。 repo sync 命令默认使用 4 个并发连接,请勿使用 -j 参数增加并发连接数。

小脚本?

虽然设置完加速与镜像后,可以做到不开魔法也可以顺利克隆,但是如果你的网络实在不好,容易失败

这里有个简单的bash脚本可以帮助你自动重试,直到同步成功或手动退出

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

echo "======start repo sync======"

# 执行 repo sync 命令
repo sync

# 使用 while 循环检查命令的退出状态
while [ $? -eq 1 ]; do
echo "======sync failed, re-sync again======"
sleep 3
repo sync
done

使用方法就是将脚本保存为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
2
source build/envsetup.sh
lunch lineage_lemonades-bp2a-user

其中user是构建类型,bp2a是代表安卓16初始版本(qpr0)

lineage_lemonades是目标名称,这里定义在device/oneplus/lemonades/lineage_lemonades.mk文件

然后开始编译系统

1
make bacon

我很可爱,请给我钱

其他文章
cover
OneShot壁纸分享
  • 24/10/02
  • 16:02
目录导航 置顶
  1. 1. 前言
  2. 2. 环境介绍
  3. 3. 更换源与更新系统
  4. 4. 安装依赖
  5. 5. 设置git信息
  6. 6. 初始化repo同步清单
  7. 7. 修改清单指向加速源
  8. 8. 同步源码
  9. 9. 小脚本?
  10. 10. 🌳获取设备树文件
    1. 10.1. 设备描述device
    2. 10.2. 内核Kernel
    3. 10.3. 厂商私有文件vendor
    4. 10.4. 硬件特性hardware
  11. 11. 初始化编译
请输入关键词进行搜索