上一篇文章中我们整合了构建下载Android源码环境的资料:
本文将介绍如何在VMware+Ubuntu16环境下编译已经下载好的Android源码。
你想知道关于如何编译源码的一切都在这里:
准备编译环境
JDK、OpenJDK环境
上一篇文章中已经提示过JDK的环境需要,这里不累述,查看笔者的编译环境:
goodong@ubuntu:~$ java -version
java version “1.7.0_95”
OpenJDK Runtime Environment (IcedTea 2.6.4) (7u95-2.6.4-3)
OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)
编译所需的依赖
以下提到的编译需要依赖的程序,请务必确认每个都安装成功:
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
如果安装过程中出现错误,务必逐个搜索解决方案,可能某些程序的版本有变动:
例如 :lib32z-dev 有可能需要安装:lib32z-dev:i386
配置SWAP交换分区
交换分区SWAP:一段用于在Ubuntu Linux服务上增加可用内存的空间。
Swap space is nothing but a disk storage used to increase the amount of memory available on the Ubuntu Linux server
Android官网:Android源码编译环境的编译指南 建议RAM/SWAP至少要配置15G。也就是说,要么你分配给虚拟机的内存达到15G,要么你要创建一个15G的SWAP空间。
配置SWAP的教程:
Ubuntu Linux Create and Add Swap File Tutorial
在ubuntu中使用file当swap
http://www.linuxidc.com/Linux/2014-08/105223.htm
编译源码
删除任何之前编译输出
$ make clobber
通过envsetup.sh脚本初始化编译环境
$ source build/envsetup.sh
或者简单的使用 . 代替 source
$ . build/envsetup.sh
选择编译目标
$ lunch
You’re building on Linux
Lunch menu… pick a combo:
1. aosp_arm-eng
……
Which would you like? [aosp_arm-eng]选择1:
$ 1
执行编译
跟着-j后面的数字根据你的Ubuntu系统配置来设定。如果你的配置是:2个CPU,每个CPU有5个核,每个核可以开启2个硬件线程,那么进行最快编译的数字在:20(2*5*2)~ 40 (2*5*4)之间。
笔者使用3个CPU,5核:
编译时命令使用:$ make -j15
接下来就是漫长的等待和解决可能错误了。
编译成功的标志
编译成功后如下图:
进入/源码根目录/out/target/product/generic目录,可以看到编译好的文件:
启动模拟器
编译SDK
编译SDK与编译源码相类似:
$ source build/envsetup.sh
$ lunch sdk-eng
$ make sdk
编译成功的提示
遍历到 /源码根目录/out/host/linux-x86/sdk/sdk$
启动模拟器
如果你编译成功之后没有关闭编译时所用的终端则直接使用emulator就可以启动模拟器,否则需要重新初始化环境:
$ source build/envsetup.sh
$ lunch aosp_arm-eng
aosp_arm-eng 是在编译时选择的build target$ emulator
启动模拟器参看:
编译Android Linux内核
下载goldfish代码
在已下载的Android源代码根目录下:
$ mkdir kernel
$ cd kernel
$ git clone http://android.googlesource.com/kernel/goldfish.git
下载完毕之后,kernel目录下会多出一个goldfish目录:
$ cd goldfish
查看所有分支:
$ git branch -amaster
remotes/origin/HEAD -> origin/master
remotes/origin/android-3.10
remotes/origin/android-3.4
remotes/origin/android-goldfish-2.6.29
remotes/origin/android-goldfish-3.10
remotes/origin/android-goldfish-3.4
remotes/origin/linux-goldfish-3.0-wip
remotes/origin/master
启动虚拟机,使用adb工具连接,查看当前的内核版本
$ adb start-server
$ adb remount
$ adb shell cat /proc/version
Android5.0使用的是3.4的内核:
合入3.4版本的代码:
$ git chekout remotes/origin/android-goldfish-3.4
合入完毕后在goldfish目录下创建一个新的文档,并命名为make_zImage.sh
#!/bin/bash
export PATH=/Android源码根目录/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin:$PATH
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
make goldfish_armv7_defconfig
make zImage -j2
然后修改goldfish目录下Makefile文件:
ARCH ?= arm
CROSS_COMPILE ?= arm-eabi-
执行make_zImage.sh脚本:
$ chmod a+x make_zImage.sh
$ ./make_zImage.sh
当控制台输出:
Kernel : arch/arm/boot/zImage is ready
时,内核代码就编译成功了。
使用新编出来的内核启动模拟器:
$ emulator64-arm -kernel 源码根目录/kernel/goldfish/arch/arm/boot/zImage
可参看的编译经验
ubuntu 编译android源码 (android-5.1.0_r3)
ubuntu编译安卓5.0源码小记
编译Android源码致命错误解决方案
Ubuntu 16.04 LTS 成功编译 Android 6.0 源