Android 系统源码编译总结

声明

此篇文章是作者本人在亲自踩过编译 Android 系统源码后总结出来的一点小经验,希望对这方面感兴趣的同学有一点帮助。

感谢

其实网上有很多关于编译 Android 系统源码的文章。作者主要参考了以下两位的文章。
Android AOSP 基础
Ubuntu 18.04(虚拟机)环境下编译Android 源码
其中 Android AOSP 基础 这篇文章的作者是两本畅销书《Android 进阶之光》以及《Android 进阶解密》的作者。大家感兴趣可以看看。
基本上按照上面两篇文章的步骤来下载 & 编译源码不会有问题。这里提几点注意。

注意

1. 关于虚拟机环境搭建

作者用的是 Windows 10 的系统环境,所以需要搭建虚拟机进行编译。关于 Windows 上面搭建 Ubuntu 虚拟机的教程,大家可以直接参考Android AOSP 基础系列的第一篇文章。【经反复测试,没问题】

2. 关于 AOSP 源码下载

在搭建好 Ubuntu 系统环境后,接下来就是要下载 AOSP 系统源码了。可以直接参考Android AOSP 基础系列的第二篇文章。【经反复测试,没问题】
作者这里下载的是 android-8.0.0_r2 版本。

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.0_r2
repo sync

3. 关于 AOSP 的编译

这里的坑就比较多了。作者最开始是直接参考Android AOSP 基础系列的第三篇文章进行编译,但各种问题就跳出来了。所以最后作者结合了两篇文章关于编译的介绍。这里说一下作者采用的几个关键参数:

lunch aosp_arm64-eng  # 此参数可能会有问题,后面会详细介绍
make -j6

这里列举几个除了网上普遍遇到的问题,作者遇到很头疼的:

  • java 版本问题:

由于作者最开始根据Android AOSP 基础系列的第二篇文章直接下载了 Android 9.0 的源码,在编译准备的时候,虽然单独安装了 jdk 8,但最终执行 java -version 命令后,提示的版本信息总是 OpenJDK 9。此版本会和 jack-admin 的 start-server 产生冲突,所以还是需要 jdk 8 的环境。这里当然可以通过设置环境变量等一系列操作来设置 java 版本为 jdk8。如果不想这么麻烦,可以在第二步下载 AOSP 源码的时候,就直接将版本指定为 Ubuntu 18.04(虚拟 机)环境下编译Android 源码这篇文章中下载的 android-8.0.0_r2 版本。

  • Jack / Java: OOM

简单暴力:通过调大 Virtual Box 中 内存大小 解决。(建议至少设置为 8G 以上。作者最开始设置的 4G,就报出来各种 OOM 的问题)

  • swap 交换分区大小设置

建议至少设置 2G 以上。关于 swap 交换分区大小设置的方法,网上搜索会有很多介绍。这里贴一下命令:

# 这里设置的是 2G。如果需要继续调大,可以直接调大 count 的值即可。换算方式:bs * count = 64M * 32 = 2048M = 2G
$ sudo dd if=/dev/zero of=/swapfile bs=64M count=32
$ sudo mkswap /swapfile 
$ sudo swapon /swapfile

一般看到下图所示提示信息,则表示编译成功了。


AOSP 编译成功.png

4. 关于 Emulator 的启动

编译成功后,并不代表就可以成功启动 emulator。作者在启动 emulator 的时候遇到了两个问题。在网上搜了很多,没有直接搜出答案,网上基本都是关于 Android Studio 启动模拟器报错的,而没有编译 AOSP 后,启动模拟器报错的。不过呢,我们可以举一反三。所以根据网上的资料,作者改变了一些参数,得到了解决方案。现在贴一下:

  • libGL error
libGL error: MESA-LOADER: failed to open swrast (search paths /usr/lib64/dri)
libGL error: failed to load driver: swrast
Segmentation fault (core dumped)

该错误可以直接参考Ubuntu 16.10 启动android虚拟机,报libGL error。但是需要注意第三步,也就是文章中的 Step 3。由于我们是 AOSP 源码编译,所以并没有单独设置 $ANDROID_HOME,所以 Step 3 的路径需要进行修改。下面贴出作者根据自己编译环境路径进行的修改:

$ cd ~/aosp/prebuilts/android-sdk-linux_x86/lib64/libstdc++
$ mv libstdc++.so.6 libstdc++.so.6.bak
$ ln -s /usr/lib64/libstdc++.so.6 ~/aosp/prebuilts/android-sdk-linux_x86/lib64/libstdc++

如此便可完美解决!

  • -gpu off
emulator: WARNING: Crash service did not start
init: Could not find wglGetExtensionsStringARB!
getGLES1ExtensionString: Could not find GLES 1.x config! 
Failed to obtain GLES 1.x extensions string! 
emulator: device fd:1112 
HAXM is working and emulator runs in fast virt mode 
emulator: ERROR: Could not initialize OpenglES emulation, use ‘-gpu off’ to disable it. 
Could not initialize emulated framebuffer

关于这个错误,网上搜了N久,也没找到一个可执行的方案。最后还是根据错误信息提示 ‘-gpu off’ 以及 emulated framebuffer 推测是和虚拟机显存有关。于是直接去调整 VirtualBox 的显存。之前是 16M,调整到 64M,重启!执行 emulator,成功运行~!简单粗暴吧!

虽然成功运行了模拟器,But 还是出现了一个问题,就是模拟器是很老的机型样式,同时,黑屏~!这也是上面我说执行 lunch aosp_arm64-eng 命令可能出现问题的原因。这里黑屏的原因推测是因为兼容性导致的。可以在 lunch 的时候参照Android AOSP 基础系列的第三篇文章中提到的 lunch aosp_x86-eng 进行执行。由于作者尚未重新更换 lunch 命令,故该推测尚待验证。感兴趣的朋友可以自行去验证下。
作者会在亲自验证后的第一时间对本文进行更新!

完结

本文并没有讲解 AOSP 下载&编译的详细步骤,因为作者觉得已经有很棒的文章进行相关阐述,所以也就无需赘言。只是把过程中相关的几个注意点提出来给大家作参考。希望可以帮助到大家。
我是 FredWhite,你们的好盆友,我在这儿等着你!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 226,679评论 6 526
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 97,610评论 3 411
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 174,336评论 0 372
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,146评论 1 306
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,001评论 6 405
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,522评论 1 318
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,633评论 3 433
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,777评论 0 283
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,291评论 1 329
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,272评论 3 352
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,410评论 1 363
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,977评论 5 354
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,671评论 3 342
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,086评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,299评论 1 278
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,991评论 3 385
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,397评论 2 369

推荐阅读更多精彩内容