启航!Android10源码编译之深入折腾Vmware虚拟机
时间:2023-06-29 19:36:01 | 来源:网站运营
时间:2023-06-29 19:36:01 来源:网站运营
启航!Android10源码编译之深入折腾Vmware虚拟机:
前言
最近跟朋友组了个局,一起学习framework相关的源码。学习源码,首先就是要下载,编译源码啦。恰巧Android10的源码在本周刚刚发布,所以索性就拿它来进行framework的研究学习
因为我目前使用的是Mac的本子,但是在Mac上搭建环境进行源码下载和编译会出现各种问题,所以使用Wmware加载ubanbu系统的方式来进行下载和编译。虽然说解决了一部分问题,但是也产生了新的问题,也算是填了不少的坑
这篇文章主要是记录下遇到的坑以及填坑的过程,给其他也有着相同问题的小伙伴把路铺平,尽快下载并编译起源码,开始源码学习
正文
准备阶段
在源码下载和编译的过程中,真的是感觉各种劝退。我先说说我准备什么硬件和软件吧
准备清单
- Mac电脑,16G内存
- 固态硬盘,500G磁盘空间
- Vmware Fussion Mac版
- ubuntu 18.0.4 镜像
- 梯子一个(你懂的),为了阅读相关文档
源码下载
一切准备就绪(默认认为你已经在虚拟机中跑起了ubantu系统),就可以搭建编译和下载的环境了,这个直接按章Google
官方文档去配置相关环境就ok了
配置完环境,就可以准备下载源码了,这里我们需要下载的分支是android_10.0.0-r2,因为国内网络环境原因,这里使用清华源替换Google的下载源进行下载,具体看
这篇文章,写的很详细了,不再重复赘述
还需要提醒的一点是,整个AOSP的源码大概需要100G左右的磁盘空间,如果加上编译,至少需要300G,所以在创建虚拟机的时候要提前分配好足够的磁盘空间,物理磁盘空间也必须保证足够,这就是准备清单里为什么有固态硬盘这一项。当然内存空间足够的可以忽略。
还有一点,源码下载和编译的环境是必须区分的内存分区格式,Mac上下载和编译出现各种问题也是跟这一点有很大关系
重要的指令
$ git clone https://aosp.tuna.tsinghua.edu.cn/git-repo$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-11.0.0_r8$ repo sync
接下来就是等着下载完就OK了
源码编译
恭喜进行到第三步,你已经超越了90%的人--因为大多数卡在了第一步
编译教程直接参考Google的
这篇,基本上问题不大,如果想再电脑模拟器上运行,最好执行
lunch
后选择x86的架构来编译
因为咱们是在虚拟机环境下运行的,所以我在这一步遇到的最大的问题只有一个,就是内存不足导致进程被kill,甚至有一次我编译了90%了,因为内存不足导致进程被kill了,真是欲哭无泪...
在不增加现有硬件的情况下,我采用了两个方法
方法一,给虚拟机分配更多的内存空间和CPU核心数(为了加快编译)
我Mac主机16G内存,给虚拟机分了12G,你们可以看着办,反正越多越好
方法二,增加SWAP空间大小
这个具体的原理还没有深入去研究,反正参考
这篇文章解决了。需要注意的是,增大2048MB是远远不够的(多次编译失败的经验...),我唯一成功的一次,直接增大到了8192MB
编译过程中也可以另开一个terminal窗口,通过
top
指令查看实时的内存使用情况
接下来的编译时间大概需要3-8个小时,根据硬件的不同,可以去休息下了...
运行编译镜像
到了这一步基本上就算是完成了,那来运行下我们编译的镜像吧!按照
官方教程咱们现在模拟器上跑跑,直接运行
emulator
! 然后过了好久...好久...好久...我发现就是运行不起来啊
既然直接使用指令运行不起来,那咱们换个思路,来个偷梁换柱!
打开咱们熟悉的工具AS,创建一个AVD虚拟机,使用官方提供的Android10的镜像。创建完毕后找到sdk所在的相关目录
sdk/system-images/android-P/google_apis/x86
,然后找到我们编译好的镜像的目录,大概在
./out/target/product
这个目录中,也是找到编译版本的目录,我参考了
这篇文章,找到编译好的核心文件
- Linux Kernel
- system.img
- userdata.img
- ramdisk.img
把这四个文件替换创建AVD模拟器的相关目录去,然后通过AS运行模拟器,不出意外的话,你就可以看到编译好的Android10运行起来了。
恭喜你,完成所有下载和编译工作,但是framework的学习之路才刚刚开始
一起,继续加油吧!
后记
下载和编译的过程中确实遇到了许多问题,感谢路遥大哥的相关指导,和阿拉神农(邓老师)提供的学习社群神农班,以及一起学习的朋友提供的宝贵建议
最最重要的一点是,遇到困难不要放弃,攻克它,拿下下,然后收获属于自己的经验
最后的最后
觉得不错?不妨点个赞,然后关注一下?