2. 编译环境搭建

2.1. 准备工作

编译 Android 对机器的配置要求较高:

  • 64 位 CPU

  • 16GB 物理内存+交换内存

  • 250GB 空闲的磁盘空间

建议使用 Ubuntu 18.04 操作系统或更高版本

  • Ubuntu 16.04 或 18.04 软件包安装参考:

sudo apt-get update

sudo apt-get install git gnupg flex bison gperf libsdl1.2-dev \
libesd-java libwxgtk3.0-dev squashfs-tools build-essential zip curl \
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils \
xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev \
lib32readline-dev gcc-multilib libswitch-perl libssl-dev unzip zip device-tree-compiler \
liblz4-tool python-pyelftools python3-pyelftools -y 

2.2. 编译FAQ

由于每个人的PC系统版本和环境配置不一样,安装软件包后编译并不一定都会成功,可能会出现缺少某些软件包而引起的错误,如:

2.2.1. Q1

 OBJCOPY spl/u-boot-spl-nodtb.bin
  CAT     spl/u-boot-spl-dtb.bin
  COPY    spl/u-boot-spl.bin
  CFGCHK  u-boot.cfg
ERROR: No 'dtc', please: apt-get install device-tree-compiler

此时视报错信息去安装缺少的软件包(dtc)即可

2.2.2. Q2

如果Kernel编译报lz4的错误:

  LZ4C    arch/arm64/boot/Image.lz4
Incorrect parameters
Usage :
      lz4 [arg] [input] [output]

input   : a filename
          with no FILE, or when FILE is - or stdin, read standard input
Arguments :
 -1     : Fast compression (default) 
 -9     : High compression 
 -d     : decompression (default for .lz4 extension)
 -z     : force compression
 -f     : overwrite output without prompting 
 -h/-H  : display help/long help and exit
arch/arm64/boot/Makefile:31: recipe for target 'arch/arm64/boot/Image.lz4' failed

可以先编译Android下面的lz4并替换系统的lz4

mmm external/lz4/ 
sudo cp /usr/bin/lz4 /usr/bin/lz4.org   # 备份
sudo cp out/host/linux-x86/bin/lz4 /usr/bin/lz4 # 替换系统原有lz4

如果编译出现这种情况:

error: external/crosvm/rutabaga_gfx/Android.bp:91:1: "rutabaga_gfx_host_test_src_lib" depends on undefined module "libgfxstream_backend"
error: external/crosvm/rutabaga_gfx/Android.bp:13:1: "librutabaga_gfx" depends on undefined module "libgfxstream_backend"

那是因为需要先编译一次 Android 上层才可以,或者也可以直接从以下链接下载 lz4 到系统中,直接进行替换。

sudo cp /usr/bin/lz4 /usr/bin/lz4.org   # 备份
sudo cp lz4 /usr/bin/lz4