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

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
哈基米南北1 天前
ViewRootImpl 事件分发责任链分析
源码
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas