编译环境准备
软件:vbox
系统:ubuntu14.04
内存:8G
处理器:4个
磁盘大小:100G
以下是安卓7.1源码(全志)和内核编译步骤:
一、内核编译
1、安装jdk8(注本人使用的是openjdk8)
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
java -version #检测jdk安装
------------------------------------------------------------------------------------------------
openjdk7
ubuntu系统安装openjdk7时,在ubuntu 14.04上安装能够直接使用下述命令:
sudo apt-get update
$ sudo apt-get install openjdk-7-jdk
使用上述命令进行安装时,能够直接进行openjdk7的安装。
openjdk8
opendjk8的安装按照google官方文档是需要ubuntu version >15.04,在v>15.04时,可以直接使用下述命令进行openjdk8的安装。
$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk
1
2
但是对于ubuntu14.04或者以下的版本,当然在编译android7.1.1源码时,不建议ubuntu版本低于14.04。当在14.04版本时,不能采用上述方式进行安装,需要下载3个deb安装包。
• openjdk-8-jre-headless_8u45-b14-1_amd64.deb with SHA256 0f5aba8db39088283b51e00054813063173a4d8809f70033976f83e214ab56c0
• openjdk-8-jre_8u45-b14-1_amd64.deb with SHA256 9ef76c4562d39432b69baf6c18f199707c5c56a5b4566847df908b7d74e15849
• openjdk-8-jdk_8u45-b14-1_amd64.deb with SHA256 6e47215cf6205aa829e6a0a64985075bd29d1f428a4006a80c9db371c2fc3c4c
如果在安装过程中遇到错误,可以使用命令
sudo apt-get -f install
1
安装完成之后,可以使用下述命令查看现有安装的openjdk版本。
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
-------------------------------------------------------------------------------------------------
2、安装必要的一些包(以下的包,都是采坑一个个过来的,所以请务必都安装)
sudo apt-get install gawk #解决:awk: line 2: function strtonum never defined
apt-get install fakeroot #解决:../scripts/build_rootfs.sh: line 19: fakeroot: command not found
sudo apt-get install g++-multilib gcc-multilib #解决:lichee/tools/pack/pctools/linux/android/mkbootimg: No such file or directory
3、不出意外的话,就可以看到如下成功编译结果
二、安卓源码编译
1、进入安卓源码目录,执行以下命令
$cd ../android/ #安卓源码目录
$source build/envsetup.sh #启动源码编译环境(即添加编译命令)
$lunch #选择平台编译选项
2、启动lunch命令,选择平台(一般选22),如下图所示。
这些系统平台含义如下:
eng: 工程机,
user:最终用户机
userdebug:调试测试机
tests:测试机
3、执行以下命令,编译安卓源码
$extract-bsp
$make -j4 #编译(make -j4表示处理器4个,根据电脑配置选择)
$pack #将编译成功的系统打包成img镜像。
你以为步骤3这么容易? No 。我大概花了4个晚上才成功,每天有不同的问题出现,主要是编译环境的问题,下面贴出我编译过程中出现的问题以及解决方法。
FAQ
问题一:出现*****prebuilts/misc/linux-x86/bison/bison.......
解决方法:sudo apt-get install bison
问题二:出现ninja: build stopped: subcommand failed Android 或者GC overhead limit exceeded.
解决方法:修改prebuilts/sdk/tools/jack-admin 文件内容
将JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME" 改为
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"
注:-Xmx4096m或者-Xmx4g ,表示使用主机内存的一半,前面我说本人使用的内存是8G哦,当然如果你的内存大,可以使劲的用
问题三:出现Failed to contact Jack server: Problem reading .jack-server/client.pem. Try 'jack-diagnose'
解决方法:
jack-admin kill-server #杀死jack进行
jack-admin uninstall-server #卸载jack服务
make # 编译
注:Jack编译器工具是一套新的Android编译工具用来将Java代码转换为Android dex字节代码,所以你jack就是用来将java代码编译成安卓的字节码编译器