编译过程:
下载源码->搭建编译环境->编译源码->解决编译报错->生成编译固件包
编译环境
本文使用的是下载好的Android8.1源码,搭建好的虚拟机Ubuntu14.0/Ubuntu16.0(建议分配300G及以上的内存)
下载git
sudo apt-get install git
配置自己的user.name及user.email
git config --global user.email “[email protected]”
git config --global user.name “fys”
下载jdk1.8
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
开始编译
进入android源码目录初始化编译环境
source build/envsetup.sh
初始化完成之后执行lunch选择编译目标
lunch
输入想要编译的目标号即可
这里如果是自己兴趣开发使用,随便玩玩一般选择1或2即可
开发人员需要自行选择自己项目具体的编译目标
make开启编译
通过make指令进行代码编译,该指令通过-j参数来设置参与编译的线程数量,以提高编译速度
make -j4 >build.log
>build.log 代表输出编译日志可以在源码根目录直接查到,编译过程中的报错可以在log中查找
解决编译报错
编译报错一般会在命令行最后提示如下:
[0;31m#### failed to build some targets (11:11 (mm:ss)) ####[00m
报错1:/bin/bash: m4: command not found
解决方法:
sudo apt-get install m4
报错2: /bin/bash: xmllint: command not found
解决方法:
sudo apt-get install libxml2-utils
报错3:SSL error when connecting to the Jack server. Try ‘jack-diagnose‘
解决方法:
从 /etc/java-8-openjdk/security/java.security中删除TLSv1, TLSv1.1
一般要重写java.security文件,这个文件赋予最高权限也无法修改保存
这里给出的解决方法是在java.security文件中删除TLSv1, TLSv1.1之后另保存为,取代原先的文件
2、删除完成之后回到源码根目录下执行:
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
报错4:Out of memory error (version 1.3-rc7 'Douarn' (445000 d7be3910514558d6715ce455ce0861ae2f56925a by [email protected])).
解决方法:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
报错5:/bin/bash: prebuilts/misc/linux-x86/bison/bison: No such file or directory
解决方法:
sudo apt-get install g++-multilib
sudo apt-get install gcc-multilib
sudo apt-get install lib32ncurses5-dev
sudo apt-get install lib32readline-gplv2-dev
sudo apt-get install lib32z1-dev
编译成功
terminal上编译显示如图即表示编译完成
查看log,显示如下即表示编译成功