玩转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
相关推荐
杨进军10 分钟前
React 创建根节点 createRoot
前端·react.js·前端框架
ModyQyW25 分钟前
用 AI 驱动 wot-design-uni 开发小程序
前端·uni-app
说码解字31 分钟前
Kotlin lazy 委托的底层实现原理
前端
爱分享的程序员1 小时前
前端面试专栏-算法篇:18. 查找算法(二分查找、哈希查找)
前端·javascript·node.js
翻滚吧键盘1 小时前
vue 条件渲染(v-if v-else-if v-else v-show)
前端·javascript·vue.js
vim怎么退出1 小时前
万字长文带你了解微前端架构
前端·微服务·前端框架
你这个年龄怎么睡得着的1 小时前
为什么 JavaScript 中 'str' 不是对象,却能调用方法?
前端·javascript·面试
Java水解1 小时前
前端常用单位em/px/rem/vh/vm到底有什么区别?
前端
CAD老兵1 小时前
Vite 如何借助 esbuild 实现极速 Dev Server 体验,并支持无 source map 的源码调试
前端
南屿im1 小时前
JavaScript 手写实现防抖与节流:优化高频事件处理的利器
前端·javascript