AOSP的编译及刷机
简介
众所周知,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
- 先将shell切换到aosp源码根目录
- 执行两个解压出来的驱动shell,记得要同意License
- 执行source build/envsetup.sh,这会向shell中写入一些环境变量
- 先make clean一下
- 使用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账号编译
刷机
- 先将手机的BL锁解开(每个机型都不同,网上会有对应的教程),进入fastboot模式\
- 配置fastboot工具(现在Google好像推出了在线刷写工具https://flash.android.com/,可以尝试使用),可以在aosp目录下通过make fastboot命令编译出来,也可以直接从网上下载:https://developer.android.com/studio/releases/platform-tools
- 进入编译后产生的镜像的目录…/aosp/out/target/product/walleye(这个是你机型的代号,每种机器都不一样)
- 执行命令
fastboot flashall -w
- 重启即可看到,我们编译的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的编译及刷机相关推荐
- Pixel 4 AOSP源码编译及刷机
先吐槽,Google的代码和文档写的是真烂.完全根据他的文档来操作是完不成Pixel 4 AOSP源码编译和刷机这个事情的.经过痛苦的挣扎,最后终于刷机成功了. 代码下载 代码下载的流程在这,http ...
- 基于Android12 AOSP和Pixel4,针对framework模块修改源代码的部分编译和刷机流程
部分编译前最好备份一份干净的Android12代码 一.部分编译:(针对修改framework模块中的代码) source ./build/envsetup.sh(在Android12代码的根目录下) ...
- Android12 源码下载、编译、刷机、单编调试Framework
文章目录 说明 1. 代码下载 1.1 下载Repo工具 1.2 安装和配置Git 1.3 创建工程目录 1.4 初始化Repo仓库 1.5 同步代码 2. 驱动下载 2.1 下载对应机型的驱动 2. ...
- 三、Android系统内核编译及刷机实战 (修改反调试标志位)
前言 在 二.Android系统源码编译及刷机实战 一文中,我们成功编译了Android 4.4.4_r1源码并刷入系统了 Nexus 5 设备,下面是设置界面的信息.上面显示的内核版本信息是3.4. ...
- Android 系统开发系列(1):Android 12 源代码下载、编译和刷机
Android 12 正式版 已经发布:https://mp.weixin.qq.com/s/OiFSWEnc-0N2z7JYWTJluw 本文就带大家下载和编译最新的 Android 12 代码,本 ...
- Android源码的下载,编译,刷机
上篇说到<framework开发环境搭建>,本篇继续介绍Android源码的下载.编译.刷机 先贴上Android源码官网地址:https://source.android.com/doc ...
- Android系统源码下载与编译、刷机--Nexus6实测
前言 此博文记录一下Android从系统源码下载到刷机的全过程. (https://source.android.com/source/build-numbers.html 页面中列表信息找到自己设备 ...
- AOSP源码编译和刷机(基于Nexus 5X)
一.环境依赖 Ubuntu 18.04 系统库依赖 apt-get install git-core gnupg flex bison build-essential zip curl zlib1g- ...
- pixelXL 下载编译源代码刷机烧录记录
清华镜像站地址:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ google官网代号标记和细分版本:https://source.android.com ...
最新文章
- input自适应_一种Dynamic ReLU:自适应参数化ReLU(调参记录26)Cifar10~95.92%
- 使用maxscale数据库中间件解决读负载均衡
- MongoDB和Web应用程序
- CBOW模型的数据预处理
- JAVA 使用Jacob调用windows的Sapi实现文本转语音文件
- 不能编辑_解决cass9.0双击不能编辑文字和图块
- java缓存技术redis原理_Java架构师-5分钟带你深入理解Redis的持久化方式及其原理...
- Mutes锁_递归锁_信号量semaphore
- java cms文章管理_孔浩java cms完整视频教程_爱分享666
- 安卓常用应用市场包名和常用APP包名
- android在体检报告叫什么,体检报告检测分析app
- 海龟作图python等边三角形_python 海龟作图
- debconf_Starbound的开源游戏开发,DebConf上的SteamOS等
- SIM卡、USIM卡、UICC卡、eSIM卡的区别
- 了解到的生二孩最好的理由
- 磨金石教育摄影技能干货分享|近景拍摄技巧分析
- NLM6XX系列无线无源采发仪的工作模式
- 主管给实习生新人的一封邮件,字字珠玑,用心良苦
- 判断这一天是这一年的第几天? 的三种方法! Java
- 金融IC卡全“芯”起航
热门文章
- omron欧姆龙NJ NX程序 全自动锂电池二封机,主站NJ501-1400+威纶通触摸屏
- java基于微信小程序的校园报修系统 uniapp小程序
- CPU Cache:访问存储速度是如何大幅提升的?
- 特别研究:资产证券化——REITs
- win7 安装.Net framework 4.0出现 安装不成功,错误代码0x80240037 的解决方法
- dfs版SPFA判负环
- Keras笔记(三):目标函数objectives /loss
- 13 - 接触基本介绍
- 算法 PK 猫咪 | 章鱼保罗后继竟然是只猫?
- shell脚本里面字符串转换大小写