公司上一个Android 5.1的项目完成了,编译环境使用的是同事配置好的ubuntu 12.04。目前准备做Android O的项目,然而下载了Android O的源码,编译发现有一堆的错误。网上查了一下Android O的编译环境和Android 5.1的还是有差异的。自己从新下载安装了ubuntu 16.04,摸索了一下,总结出下边的编译环境搭建方法,给大家参考一下。如有不对的地方,还请各位大神提出。
1、配置java1.8
udo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java 选择java的版本
sudo update-alternatives --config javac 选择javac的版本
java –version 查看java版本
2、编译软件安装
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386libgl1-mesa-dev g++-multilib
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproczlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperfbuild-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
sudo apt-get install libssl-dev
3、编译时出现out of memory error
[ 82% 72369/88250] Building with Jack:out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex
FAILED:out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex
/bin/bashout/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
Out of memory error (version 1.3-rc6'Douarn' (441800 22a11d4b264ae70e366aed3025ef47362d1522bb [email protected])).
Java heap space.
Try increasing heap size with java option'-Xmx
Warning: This may have produced partial orcorrupted output.
[ 82% 72372/88250] ccout/soong/.intermediates/external/llvm/lib/CodeGen/libLLVMCodeGen/android_arm64_armv8-a_static_core/obj/external/llvm/lib/CodeGen/LiveVariables.o
ninja: build stopped: subcommand failed.
22:57:57 ninja failed with: exit status 1
make: *** [run_soong_ui] Error 1
解决方法:
1、修改Jack的配置文件prebuilts/sdk/tools/jack-admin
这是一个管理Jack的shell脚本,找到start-server函数,直接修改其启动参数,由原来的
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"
此时Jack服务器仍然在后台执行,所以我们需要将其停止,然后重启启动(make会自动启动Jack服务器)才能使得修改后的参数生效。
我们执行下面的命令此时Jack服务器仍然在后台执行,所以我们需要将其停止,然后重启启动(make会自动启动Jack服务器)才能使得修改后的参数生效。
我们执行下面的命令:
#先停止服务
./prebuilts/sdk/tools/jack-admin stop-server
#重新开始服务
./prebuilts/sdk/tools/jack-admin start-server
整好环境后,make -j16,第二天来到就出现#### make completed successfully (59:36 (mm:ss)) ####
大吉大利,今晚吃鸡