玩转Android Framework:编译AOSP

本系列将基于Android 14详细讲解Android Framework的系列知识。

首先如果想要了解AOSP的编译,可以参照Google AOSP官网的介绍:

source.android.com/docs/setup/...

硬件要求

官方文档上说我们至少需要16gb内存来编译源码以及250g的硬盘空间来检出源码,这里我实际编译Android 14的时候16gb内存是无法编译通过的,所以建议系统内存升级到32gb

这是我的硬件,实际编译过程大约在2到3个小时:

硬盘: 2T

CPU: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz

内存: 32gb

系统要求

如果想要编译Android 源码,那么我们就需要使用Ubuntu系统,具体的系统要求及配置步骤可以参考这里:

source.android.com/docs/setup/...

为了少踩坑,建议准备一台安装Ubuntu系统的电脑或者安装Windows Ubuntu双系统,尽量不使用虚拟机或者WSL来进行编译。

Ubuntu双系统安装,可以参考这里:

blog.csdn.net/Flag_ing/ar...

我安装的ubuntu版本是 18.04 lts,也可以选择安装22.04 lts或其它高于18.04的 lts版本。

在安装ubuntu系统过程中,swap建议设置为实际内存的1倍,比如如果是32gb内存那么swap也设置为32gb。

编译环境准备

当系统安装成功之后,首先要做的就是下载编译Android所需要的软件包:

bash 复制代码
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

下载源码

安装成功之后,就要开始下载源码,AOSP使用repo进行版本管理,这实际上是一个基于git的python脚本,关于repo的介绍可以看这里:

source.android.com/docs/setup/...

首先我们需要下载repo,这里推荐使用国内的清华镜像进行repo以及源码的下载:

mirrors.tuna.tsinghua.edu.cn/help/AOSP/

第一步 下载repo文件:

bash 复制代码
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

第二步 初始化工作目录:

bash 复制代码
mkdir Android14
cd Android14

第三步 初始化源码下载

这里我们需要指定镜像地址和分支,AOSP的分支可以在这里找到

android.googlesource.com/platform/ma...

由于我们是基于Android 14,所以在里面查找android 14的最新分支 android-14.0.0_r28:

bash 复制代码
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r28

第四步 下载源码

bash 复制代码
repo sync

Android源码的下载需要大约3到4个小时,这个时候只要耐心等待就好了,最后下载完成的目录大概是这个样子:

编译源码

当我们完成Android 源码的下载,下一步就可以开始进行编译了

第一步 编译环境初始化:

bash 复制代码
. build/envsetup.sh

第二步 选择编译目标

bash 复制代码
lunch

然后控制台会打印出现有的编译目标:

接下来输入 sdk_phone_x86_64,可以看到输出:

第三步 进行编译

bash 复制代码
make

然后等待就可以了,编译时间一般在2到3个小时,等待编译成功之后,会出现如下字样:

第四步 运行模拟器

然后输入以下命令,就可以直接看到我们编译过后的Android 14了:

bash 复制代码
emulator

编译问题汇总

运行repo命令提示python格式错误

这个时候需要检查一下系统默认的python文件是否为python3,如果不是,需要将系统默认的python修改为python3

blog.csdn.net/White_Idiot...

repo init 或者repo sync报错

这个时候遇到的绝大多数都是网络错误,可以检查网络状态重新repo init 或者repo sync

make报错 build failed

这个时候需要检查一下依赖包是否都安装上了,还有就是硬件要求是否达标,是否设置了系统swap

emulator报错 This user doesn't have permissions to use KVM (/dev/kvm)

这个时候运行一下以下命令就可以了:

bash 复制代码
sudo chown 你的用户名 -R /dev/kvm
相关推荐
Zero1017131 小时前
【详解pnpm、npm、yarn区别】
前端·react.js·前端框架
&白帝&1 小时前
vue右键显示菜单
前端·javascript·vue.js
Wannaer1 小时前
从 Vue3 回望 Vue2:事件总线的前世今生
前端·javascript·vue.js
羽球知道1 小时前
在Spark搭建YARN
前端·javascript·ajax
光影少年2 小时前
vue中,created和mounted两个钩子之间调用时差值受什么影响
前端·javascript·vue.js
青苔猿猿2 小时前
node版本.node版本、npm版本和pnpm版本对应
前端·npm·node.js·pnpm
一只码代码的章鱼3 小时前
Spring的 @Validate注解详细分析
前端·spring boot·算法
zimoyin3 小时前
Kotlin 协程实战:实现异步值加载委托,对值进行异步懒初始化
java·前端·kotlin
程序员与背包客_CoderZ5 小时前
Node.js异步编程——Callback回调函数实现
前端·javascript·node.js·web
非凡ghost5 小时前
Pale Moon:速度优化的Firefox定制浏览器
前端·firefox