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

相关推荐
顾林海12 分钟前
Android MMKV 深度解析:原理、实践与源码剖析
android·面试·源码阅读
雨白1 小时前
TCP/IP 核心概念详解:从网络分层到连接管理
android
Wgllss2 小时前
雷电雨效果:Kotlin+Compose+协程+Flow 实现天气UI
android·架构·android jetpack
用户207038619494 小时前
Compose 可点击文本:ClickableText Compose 中的 ClickableSpan
android
常利兵4 小时前
Kotlin作用域函数全解:run/with/apply/let/also与this/it的魔法对决
android·开发语言·kotlin
幼稚园的山代王4 小时前
Kotlin-基础语法练习一
android·开发语言·kotlin
闻不多4 小时前
用llamaindex搭建GAR遇到400
android·运维·服务器
阿华的代码王国4 小时前
【Android】适配器与外部事件的交互
android·xml·java·前端·后端·交互
最初的↘那颗心4 小时前
Flink Stream API 源码走读 - window 和 sum
大数据·hadoop·flink·源码·实时计算·窗口函数
跨界混迹车辆网的Android工程师5 小时前
实现Android图片手势缩放功能的完整自定义View方案,结合了多种手势交互功能
android·交互