目录

AOSP之Ubuntu22编译Android12源码

1.编译准备

安装系统: Ubuntu 22.04 LTS 编译版本: Android 12.1.0 物理机配置: CPU10900K 32GB内存, 1T硬盘, 16G虚拟内存

题外话:

  • 主力机一直都是mac, 但是mac编译真的是崩溃, 况且从2021,6,22起, MacOS已经不被支持了,所以还不如搞个固态安一个Ubuntu比较省心

  • 关于mac系统Docker安装Ubuntu来进行编译, 特别慢,不推荐, 性能都不如10400 unRaid虚拟机跑Ubuntu快.

  • 内存的话官方要求最低16GB, 但是在使用的过程中本身32G物理+2G虚拟内存仍然在不同进度时会报错停止. 后来把虚拟内存扩容到了16G, 在编译时就没再报过内存错误. 峰值使用如下图 1-%E5%86%85%E5%AD%98%E4%BD%BF%E7%94%A8%E5%B3%B0%E5%80%BC.jpg

  • 硬盘的话, 我认为Android12最低要有200G, 建议500GB, 越多越好, 如果是200G不到可能需要删除一些不需要文件

android12.1.020220705全部代码为例子

指定版本拉取 拉取aosp全部代码
.repo 68GB 200GB
sync检出后 150GB(+75GB) 300GB
make编译后 415GB

所以如果硬盘就是很小, 并且也没有后续更新拉取代码的需求, 那么在sync同步检出后 .repo文件夹就可以删除.

官方环境要求

开始

1.仓库拉取前的准备

1.1.安装Git

AOSP是一个由众多Git仓库组合而成的代码库

# 安装Git 并设置使用使用者信息
sudo apt-get install git
git config --global user.email "xxxx@qq.com"
git config --global user.name "xxxx"

1.2.安装repo工具

repo是一个python编写来管理众多Git的工具

# 创建python3软连接, 20200101停止了对python2的支持
# ubuntu22.04 默认安装3.10.4
ln /usr/bin/python3 /usr/bin/python

# 安装下载工具curl
sudo apt-get install curl

# 下载repo工具
sudo curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo

# 修改权限
chmod 777 /usr/bin/repo

2.拉取aosp代码

2.1创建文件夹并进入

文件夹的路径中不要包含中文

2.2方式1: 拉取全部代码

2.2方式2: 拉取指定代码

仓库拉取方式-指定拉取的版本号 android版本号和支持设备

2.3同步检出

下载后解压到新建的文件夹内, 此时只有一个*.repo*的隐藏文件夹

在更目录下执行 repo sync

3.make编译

3.1编译环境准备

后续如果单编需要使用JDK11, 所以这里直接安装版本11

# 安装jdk
sudo apt-get update
sudo apt-get install openjdk-11-jdk


# 安装依赖包
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip libncurses5

3.2开始编译

# 初始化
source build/envsetup.sh

# 删除之前的编译产出
make clobber

# 选择编译版本(模拟器版本)
lunch sdk_phone_x86_64
# 如果是要编译真机等其他版本, 使用lunch进行交互选择
lunch

# 开始编译 (-j10 可以指定执行线程, 默认自动分配)
make 

# 编译成功后 执行模拟器
emulator

遇见的问题

  1. sync错误, not found 方法1: 在repo sync检出时, error: in sync: revision master in platform/libcore not found 尝试单独更新一下问题目录: repo sync platform/libcore 方法2: 清除下载失败的文件, 自行增加或者替换要删除的文件路径
  2. 删除失败的.git仓库rm rf .repo/projects/libcore.git
  3. 删除失败的已经检出的代码 rm rf libcore
  4. 重新repo sync

make时报错:error while loading shared libraries: libncurses.so.5

详细报错:

prebuilts/clang/host/linux-x86/clang-3289846/bin/clang.real: 
error while loading shared libraries: libncurses.so.5: 
cannot open shared object file: No such file or directory

处理方案: sudo apt-get install libncurses5

make时报错ninja: build stopped: subcommand failed.

详细报错:

FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build  -t -b out/soong -d out/soong/build.ninja.d -o out/soong/build.ninja Android.bp
Killed
ninja: build stopped: subcommand failed.
10:16:29 soong failed with: exit status 1

处理方案: 本人增大虚拟机内存后无此错误.

参考链接

repo介绍 repo官网介绍 Ubuntu增大虚拟内存 AOSP清华大学镜像说明 源码单编