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!!!

相关推荐
Digitally1 小时前
如何通过 5 种有效方法同步 Android 和 Mac
android·macos
让子弹飞021 小时前
永久解决ubuntu网络连接问题
linux·运维·ubuntu
行墨3 小时前
Jetpack Compose 深入浅出(二)——基础组件Text
android
雨白5 小时前
深入理解协程的运作机制 —— 调度、挂起与性能
android·kotlin
沐怡旸5 小时前
【Android】Android系统体系结构
android
namehu5 小时前
React Native 应用性能分析与优化不完全指南
android·react native·ios
xqlily6 小时前
Kotlin:现代编程语言的革新者
android·开发语言·kotlin
HelloBan6 小时前
如何正确去掉SeekBar的Thumb和按压效果
android
木易 士心6 小时前
Android EventBus 源码解析:设计模式、原理与实现
android
ClassOps6 小时前
源码阅读 LeakCanary
android