简介

众所周知,Android是开源的,AOSP(Android Open Source Project)为Android开源项目的缩写。作为一名Android开发,掌握Android系统的工作机制是技术成长中的必经之路,第一步就是自己编译Android系统。

准备工作

  • 一台可以解BL锁(BootLoader),并且厂商提供了硬件驱动的设备,这里推荐使用Google亲儿子手机(Nexus、Pixel系列),可以解BL锁,Google官方会提供硬件驱动,并且AOSP里会提供对应机型的配置
  • 一块剩余空间至少大于300GB的硬盘(Android11源码-150GB左右,编译产物-150GB左右)
  • 系统最好为Linux,MacOS也可(Windows可以用WSL)
  • 系统需要使用Ubuntu(我不确定别的Linux发行版可不可用),自2021年6月22日起,AOSP不再支持在Windows或MacOS上构建(Windows可以使用WSL,详见WSL编译AOSP必要的几个前置工作)
  • 内存至少要16GB,过小的内存会导致生成build.ninja文件失败

这里是Google官方的推荐要求:https://source.android.com/setup/build/requirements?hl=zh-cN

环境搭建

参考文档:https://source.android.com/source/initializing?hl=zh-cn

主要就是下载各种编译工具,像jdk,gcc,g++等,还有各种动态库以及辅助工具

注:此文档中部分环境安装有误,缺失了一些必要的库安装,可能会编译中途报错,可以参考下文的环境安装,如果编译还是出现了依赖缺失,安装好继续编译即可

安装JDK

以Ubuntu系统为例:

sudo apt-get update
sudo apt-get install openjdk-11-jdk

注:现在AOSP编译要求JDK版本>=9

安装其他程序包

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip libncurses5

注:官方文档中缺失了libncurses5,会导致编译中途找不到libncurses.so.5库

下载源码

Android源码是由非常多的Git仓库组成的,为了可以统一管理这么多个Git仓库,Google出了一款工具,叫Repo

参考文档:https://source.android.com/source/downloading?hl=zh-cn

因为Google在国内访问的问题,建议使用镜像下载源码,下面提供几个镜像地址:

  • 清华大学

https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

  • 中科大

git://mirrors.ustc.edu.cn/aosp/platform/manifest

repo init的时候可以指定分支:https://source.android.com/setup/start/build-numbers?hl=zh-cn#source-code-tags-and-builds 在这里可以找到对应系统分支所支持的设备,比如说我的设备是Pixel2,在这张表上可以看到android-11.0.0_r25这个分支下的代码支持我的设备,所以可以执行以下命令:

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r25

然后开始进行同步:

repo sync -j8 #j8代表使用8个线程

AOSP代码下载是个漫长的过程,需要耐心等待

下载驱动

在https://developers.google.com/android/drivers?hl=zh-cn这个网站可以找到Nexus、Pixel系列的驱动,要注意每个驱动后面会有一串代号,需要和你下载的AOSP源码的build号相对应

将他们解压后会得到两个shell文件

将他们复制到下载好的aosp源码的根目录

注:网上很多教程说终端要选用bash不要使用zsh,我亲测使用zsh没有问题,如果在编译过程中出现问题,可以尝试切换shell

  1. 先将shell切换到aosp源码根目录
  2. 执行两个解压出来的驱动shell,记得要同意License

  1. 执行source build/envsetup.sh,这会向shell中写入一些环境变量
  2. 先make clean一下
  3. 使用lunch命令选择构建目标

这里是该命令的规则:https://source.android.com/setup/build/building?hl=zh-cn#choose-a-target

lunch aosp_walleye-userdebug

后面跟随的的参数可以在这里找到:https://source.android.com/setup/build/running?hl=zh-cn#selecting-device-build

你也可以在lunch后不加参数,这样会弹出一个菜单提示您选择目标

指定完成后会弹出这样一个信息提示

开始编译

构建部分的文档在这里:https://source.android.com/setup/build/building?hl=zh-cn#build-the-code
如果是初次编译,我们就直接使用m命令就可以了

m -j8 #开启8线程编译

注意事项:

  • 现在直接使用make命令会提示Calling make directly is no longer supported然后退出编译,所以使用m命令替代make
  • 不能使用root账号编译

刷机

  1. 先将手机的BL锁解开(每个机型都不同,网上会有对应的教程),进入fastboot模式\
  2. 配置fastboot工具(现在Google好像推出了在线刷写工具https://flash.android.com/,可以尝试使用),可以在aosp目录下通过make fastboot命令编译出来,也可以直接从网上下载:https://developer.android.com/studio/releases/platform-tools
  3. 进入编译后产生的镜像的目录…/aosp/out/target/product/walleye(这个是你机型的代号,每种机器都不一样)
  4. 执行命令
fastboot flashall -w
  1. 重启即可看到,我们编译的Android系统已经运行到了手机上
fastboot reboot #重启命令

常见问题

MacOS上找不到SDK

去这里https://github.com/phracker/MacOSX-SDKs/releases下载对应版本的sdk,然后将它放到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs目录下,然后重新编译

除此之外,也可以在Finder中查看

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

这个目录下存在哪个版本的sdk,确定后去修改…/aosp/build/soong/cc/config/x86_darwin_host.go文件,在darwinSupportedSdkVersions这个数组中加上你使用的sdk的版本

保存后重新编译,这个方式可能当前编译脚本不支持你所用的sdk,可能会编译报错,所以还是推荐使用第一种方式

too many open files

在Linux系统下有打开文件数的限制,可以使用以下命令设置最大可打开文件数

# ulimit -a 可以查看当前限制
ulimit -n 2048

AOSP的编译及刷机相关推荐

  1. Pixel 4 AOSP源码编译及刷机

    先吐槽,Google的代码和文档写的是真烂.完全根据他的文档来操作是完不成Pixel 4 AOSP源码编译和刷机这个事情的.经过痛苦的挣扎,最后终于刷机成功了. 代码下载 代码下载的流程在这,http ...

  2. 基于Android12 AOSP和Pixel4,针对framework模块修改源代码的部分编译和刷机流程

    部分编译前最好备份一份干净的Android12代码 一.部分编译:(针对修改framework模块中的代码) source ./build/envsetup.sh(在Android12代码的根目录下) ...

  3. Android12 源码下载、编译、刷机、单编调试Framework

    文章目录 说明 1. 代码下载 1.1 下载Repo工具 1.2 安装和配置Git 1.3 创建工程目录 1.4 初始化Repo仓库 1.5 同步代码 2. 驱动下载 2.1 下载对应机型的驱动 2. ...

  4. 三、Android系统内核编译及刷机实战 (修改反调试标志位)

    前言 在 二.Android系统源码编译及刷机实战 一文中,我们成功编译了Android 4.4.4_r1源码并刷入系统了 Nexus 5 设备,下面是设置界面的信息.上面显示的内核版本信息是3.4. ...

  5. Android 系统开发系列(1):Android 12 源代码下载、编译和刷机

    Android 12 正式版 已经发布:https://mp.weixin.qq.com/s/OiFSWEnc-0N2z7JYWTJluw 本文就带大家下载和编译最新的 Android 12 代码,本 ...

  6. Android源码的下载,编译,刷机

    上篇说到<framework开发环境搭建>,本篇继续介绍Android源码的下载.编译.刷机 先贴上Android源码官网地址:https://source.android.com/doc ...

  7. Android系统源码下载与编译、刷机--Nexus6实测

    前言 此博文记录一下Android从系统源码下载到刷机的全过程. (https://source.android.com/source/build-numbers.html 页面中列表信息找到自己设备 ...

  8. AOSP源码编译和刷机(基于Nexus 5X)

    一.环境依赖 Ubuntu 18.04 系统库依赖 apt-get install git-core gnupg flex bison build-essential zip curl zlib1g- ...

  9. pixelXL 下载编译源代码刷机烧录记录

    清华镜像站地址:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ google官网代号标记和细分版本:https://source.android.com ...

最新文章

  1. input自适应_一种Dynamic ReLU:自适应参数化ReLU(调参记录26)Cifar10~95.92%
  2. 使用maxscale数据库中间件解决读负载均衡
  3. MongoDB和Web应用程序
  4. CBOW模型的数据预处理
  5. JAVA 使用Jacob调用windows的Sapi实现文本转语音文件
  6. 不能编辑_解决cass9.0双击不能编辑文字和图块
  7. java缓存技术redis原理_Java架构师-5分钟带你深入理解Redis的持久化方式及其原理...
  8. Mutes锁_递归锁_信号量semaphore
  9. java cms文章管理_孔浩java cms完整视频教程_爱分享666
  10. 安卓常用应用市场包名和常用APP包名
  11. android在体检报告叫什么,体检报告检测分析app
  12. 海龟作图python等边三角形_python 海龟作图
  13. debconf_Starbound的开源游戏开发,DebConf上的SteamOS等
  14. SIM卡、USIM卡、UICC卡、eSIM卡的区别
  15. 了解到的生二孩最好的理由
  16. 磨金石教育摄影技能干货分享|近景拍摄技巧分析
  17. NLM6XX系列无线无源采发仪的工作模式
  18. 主管给实习生新人的一封邮件,字字珠玑,用心良苦
  19. 判断这一天是这一年的第几天? 的三种方法! Java
  20. 金融IC卡全“芯”起航

热门文章

  1. omron欧姆龙NJ NX程序 全自动锂电池二封机,主站NJ501-1400+威纶通触摸屏
  2. java基于微信小程序的校园报修系统 uniapp小程序
  3. CPU Cache:访问存储速度是如何大幅提升的?
  4. 特别研究:资产证券化——REITs
  5. win7 安装.Net framework 4.0出现 安装不成功,错误代码0x80240037 的解决方法
  6. dfs版SPFA判负环
  7. Keras笔记(三):目标函数objectives /loss
  8. 13 - 接触基本介绍
  9. 算法 PK 猫咪 | 章鱼保罗后继竟然是只猫?
  10. shell脚本里面字符串转换大小写