一、环境准备
Ubuntu18.04.4,不能使用Ubuntu16会有很多依赖软件版本太低
硬盘200G,内存4G+,交换分区(swap)4G+(可装完系统后添加,见后面错误处理部分)
二、下载源码
三、安装编译时需要的第三方库
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
sudo apt install uuid uuid-dev zlib1g-dev liblz-dev liblzo2-2 liblzo2-dev lzop git-core curl u-boot-tools mtd-utils android-tools-fsutils device-tree-compiler gdisk liblz4-tool m4 libz-dev
安装open-jdk-8
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
安装gcc-arm-none-eabi
sudo apt-get install gcc-arm-none-eabi
安装完这一项后,在~/.bashrc中最后一行添加脚本export ARMGCC_DIR=/usr/
然后执行source ~/.bashrc
安装cmake,需要3.13.0版本以上,安装步骤如下,其中./bootstrap那一步可以不用加后面的–qt-gui参数
https://blog.csdn.net/huigougou/article/details/84326907
四、开始编译
然后进入到Android源码目录,假设源码在用户根目录的aosp目录中:
cd ~/aosp
然后初始化编译环境,使用下面的命令:
source build/envsetup.sh
然后选择要编译的目标版本,先输入lunch命令
lunch
然后在显示的列表中选择你的目标版本,输入相应的数字,按回车即可
然后使用make开始编译,可以使用-j参数增加编译的线程以提高速度,线程数量为cpu核心数的2倍比较合适,比如你的cpu是4核的使用
make -j8
就可以了
五、遇到的问题
1. 错误:flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))’ failed.
Aborted (core dumped)
解决办法:
This will do the trick:
export LC_ALL=C
Add it to your bashrc file or equivalent.
参考链接:https://stackoverflow.com/questions/49955137/error-when-build-lineageos-make-ninja-wrapper-error-1
https://www.jianshu.com/p/2beae17c9b12
2、错误2:
JackServer提示out of memory
解决方案:
修改jack server内存
步骤:
打开./prebuilts/sdk/tools/jack-admin
找到下面这一行
JACK_SERVER_VM_ARGUMENTS=”${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8}”
修改为
JACK_SERVER_VM_ARGUMENTS=”${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096M}”
保存jack-admin文件
在命令行执行
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
重启jack server
然后重新编译