前言
想进一步学习android,就需要去看源码,很早之前就下了源码,编了几次一直有问题就搁置。前段时间开始写博客,看了不少资料,也买了刘望舒大佬的三部曲,《Android进阶指北》第一章就是编译,所以将搁置的计划拾起来了。由于android 12去年才出,其他的文章基本都是Q的甚至更早的版本,12上还是有一些变化,遇到一些坑,所以打算整理一下。
一、环境准备
系统环境
1、ubuntu系统最好18以上(虚拟机也可以,笔者是双系统,感觉如果学源码的话,还是可以搞双系统玩一下)
2、磁盘越大越好,最好空闲300G+吧(我现在是300多一点,但是有ccache,还有编译的文件镜像等等,不排除我代码下的有问题)
3、JAVA开发环境,repo等
具体配置可以根据各种教程去配,跟着流程就没问题,由于笔者的环境是很早之前搞得,所以最新的一次没有额外配置,所以就不详细说了。可以参考
刘望舒大佬的教程1
官网教程
下载源码
源码下载,没有科学上网的的话,推荐使用清华镜像,推荐指定版本因为毕竟是学习的过程,不需要一直保持代码有多新,我用的是android-12.0.0_r32,不想折腾其实可以下11的。
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.0.0_r32
// 同步源码树
repo sync
这块文档还是蛮多的,大差不差,可以直接看清华镜像中说明。
编译源码
刘望舒大佬的教程2
还是推荐看一下这个文档,并没有什么额外的东西。内容设计很多编译的相关知识,主要编译只需要执行
// 初始化环境,不执行之后的指令找不到,所以当指令找不到的话,先执行一下这个
source build/envsetup.sh
// 清除缓存
make clobber
// 选择编译版本
lunch aosp_x86-eng
// 编译,n代表线程数,一般是cpu核数的1-2倍之间,
// 我用一倍的几次成功了,用1.5倍编译到最后失败了 Q@Q,概率问题吧
make -jn
// 运行虚拟机
emulator
二、遇到的坑
2.1 ccache
看官方文档和比较旧的文档,会这么一条指令prebuilts/misc/darwin-x86/ccache/ccache -M 50G
,执行以后找不到指令,文件下也不存在ccache文件夹。由于笔者电脑是陪我多年的笔记本,性能比较差,所以还是挺需要这个东西的,所以郁闷了很久。