ubuntu编译android12源码

安卓源码简称AOSP,全称"Android Open Source Project",中文意为"Android 开放源代码项目"。

后续我们提到的aosp就是表示安卓源码。

编译环境

以前官方源码是支持mac系统编译的,后来谷歌官方就不支持了。

这里我使用的的系统是ubuntu24.04

比较多人用的是20.04版本,这里我用24.04还踩了一些坑的,比如会报libncurses找不到等,这里通过软连接的方式解决。。。

根据Google官方文档:

2021年6月22日之后的Android系统版本不支持在macOS系统上构建

我们只能构建之前的版本,或者之后发布的以前版本的补丁修复。

为了尽可能地减少莫名其妙地错误,我们使用Linux乌班图进行编译,笔者使用的系统版本是Ubuntu20.04

aosp的源码工程非常庞大,单单源码就有几十个G的大小,它的下载和全量编译都是非常耗时的,因此尽可能地使用性能较好的硬件电脑进行学习。

硬件建议:

  1. CPU不低6核以上
  2. 内存不低于32G
  3. 存储空间500G以上的SSD

我看一下网上有一些资料Android12版本的源码也能在mac上编译通过,但是电脑多是X86架构的,不知道M1的能否成功, 有兴趣尝试的同学可以试试,感觉坑应该少不了...

这里不做尝试...

编译步骤

  1. 安装必备工具

这没什么好说的,用过Ubuntu的童鞋们都知道使用apt命令即可:

arduino 复制代码
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python

安装libncurses6并建立软连接

bash 复制代码
sudo apt install libncurses6
sudo ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6.4 /usr/lib/x86_64-linux-gnu/libncurses.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6.4 /usr/lib/x86_64-linux-gnu/libtinfo.so.5
  1. repo工具准备

因为安卓源码是使用repo进行代码管理的,我们需要先下载repo工具:

bash 复制代码
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod +x ~/bin/repo

然后将repo配置到你的环境变量中去,将一下内容复制到你的~/.bashrc里保存即可:

ini 复制代码
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
PATH=~/bin:$PATH

最后别忘了source一下,使得更改的环境变量及时生效:

bash 复制代码
source ~/.bashrc
  1. 源码下载

我们使用一下代码初始化仓库,并同步代码:

bash 复制代码
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
mkdir aosp 
cd aosp
#初始化仓库,-b 指示分支,这里使用 android12
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.1.0_r27
#同步远程代码
repo sync

-b 后面的参数可以参考官方文档:

源代码标记和 build (opens new window)

同学们可以按照自己的兴趣选择合适的版本进行学习,虽然说每个版本可能都会有大的改动的,但是底层的逻辑大都是相通的,我们学会一个版本,另外一个版本肯定也不难。

这个下载过程比较久,笔者新下载的就用了大半天...

  1. 源码编译

我在lunch选择之后,编译成功了执行emulator,但是并没有有模拟器出来,后来查找资料发现新版的因为不带有模拟器的image。所以android12上,我们需要添加模拟器的选择.

这里我们先修改mk文件即可。

我们在源码目录下找到build/make/target/product/AndroidProducts.mk文件, 然后在最后一行添加sdk_phone_x86_64-eng

然后就可以进行编译了:

bash 复制代码
source build/envsetup.sh
lunch sdk_phone_x86_64
#lunch aosp_x86_64-eng
# 这里用16线程,取决你的cpu
make -j16

首次编译是全量编译,也是耗时很久的,我新下载的源码首次进行编译也用了两三个小时。

  1. 运行模拟器

    emulator

我们就可以看到模拟器啦。。。

自此,aosp的源码编译过程就算是完成啦,你是否看到了希望的曙光呢?

至于怎么开发自定义的Rom呢?我们下期再扯淡。。。

音视频入门基础

安卓camera应用开发

NDK学习入门

C++进阶

ffmpeg系列

Opengl入门进阶

关注我,一起进步,人生不止coding!!!

相关推荐
星释2 小时前
二级等保实战:MySQL安全加固
android·mysql·安全
老黄编程4 小时前
02-ubuntu24.04证书体系架构及证书有关配置文件、工具详细介绍
ubuntu·数字证书
catoop4 小时前
在 Windows 中基于 WSL 子系统 Ubuntu 安装配置 conda 示例
windows·ubuntu·conda
老黄编程4 小时前
03-gpg(证书管理 )详细范例
linux·运维·ubuntu·数字证书
莱茶荼菜5 小时前
Ubuntu 20.04 系统库管理详细教程
linux·运维·ubuntu
xiaotao1317 小时前
unity hub在ubuntu 22.0.4上启动卡住
ubuntu·unity·游戏引擎
沐怡旸7 小时前
【底层机制】垃圾回收(GC)底层原理深度解析
android·面试
whatever who cares7 小时前
android/java中gson的用法
android·java·开发语言
用户0273851840267 小时前
【Android】Binder 原理初探:理解 Android 进程通信机制
程序员·源码