之前写过一篇 Android源码编译笔记——Android 7.1 系统源码编译及运行,欢迎翻阅。本次编译9.0源码,流程是相同的,主要记录期间遇到的问题。

编译环境:

VMWare Player虚拟机:15.5.6
Ubuntu版本:16.04.7
虚拟机配置:6核CPU,4G内存,200G硬盘

笔者手上硬件条件有限,看网上也有电脑配置很好、一次就编译成功了的,如果读者也有较好的硬件条件,说不定你就不会遇到我记录的问题啦。

问题1

ninja failed with: signal: killed
出现这个问题,一种原因是系统内存不足。

解决方法

设置更大的swap空间。可以参考 Linux 下的dd命令使用详解Linux 下的dd命令使用详解 这篇 dd 命令讲解博客的增加swap文件部分。

问题2

Exception in thread “main” java.lang.OutOfMemoryError: Java heap space

AOSP 从Android 9.0开始,自带了编译需要的JDK,以笔者的Linux环境为例,所在目录是:prebuilts/jdk/jdk9/linux-x86/
但是通过命令查看,发现MaxHeapSize参数的值,换算后只有不到1G:

~/android-9.0.0_r46$ ./prebuilts/jdk/jdk9/linux-x86/bin/java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize'
   size_t ErgoHeapSizeLimit                        = 0                                        {product} {default}
   size_t HeapSizePerGCThread                      = 87241520                                 {product} {default}
   size_t InitialHeapSize                          = 65011712                                 {product} {ergonomic}
   size_t LargePageHeapSizeThreshold               = 134217728                                {product} {default}
   size_t MaxHeapSize                              = 1029701632                               {product} {ergonomic}
    uintx NonNMethodCodeHeapSize                   = 5830092                               {pd product} {ergonomic}
    uintx NonProfiledCodeHeapSize                  = 122914074                             {pd product} {ergonomic}
    uintx ProfiledCodeHeapSize                     = 122914074                             {pd product} {ergonomic}
openjdk version "9"
OpenJDK Runtime Environment (build 9+181-android4627429)
OpenJDK 64-Bit Server VM (build 9+181-android4627429, mixed mode)

解决方法

添加 _JAVA_OPTIONS 变量,设置更大的MaxHeapSize参数:

$ export _JAVA_OPTIONS="-Xmx4g"

关于 _JAVA_OPTIONS 的用法,读者可自行上网查阅。
解决方法参考了 StackOverflow 的问答:Java OutOfMemoryError when building AOSP 10

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐