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 "[email protected]"
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!!!

相关推荐
Mr YiRan1 小时前
Android Gradle多渠道打包
android
IvanCodes2 小时前
MySQL 视图
android·数据库·sql·mysql·oracle
KevinWang_2 小时前
Java 和 Kotlin 混编导致的 bug
android·kotlin
好学人2 小时前
Android动画系统全面解析
android
leverge20092 小时前
android studio 运行java main报错
android·ide·android studio
RichardLai882 小时前
Flutter 环境搭建
android·flutter
好学人3 小时前
Android自定义控件事件传递机制
android
V少年3 小时前
深入浅出 C++ 标准库
android
V少年3 小时前
深入浅出 C++ 特有关键字
android