android7/8 默认启用jack-server, 对代码进行预编译和处理,加快系统编译和构建,弊端是同一台机器不允许多用户同时编译,
经常出现端口冲突,内存不足和溢出现象<android 10之后该功能默认被禁用了>。
另外ubuntu系统默认开启了自动升级功能,因此默认会升级相关软件包或依赖包,从而出现无法编译代码问题。
主要问题如下:
ubuntu 16.04 Linux 4.15.0-142-generic gcc 5.4.x
1)java 8u292 <1.8.0_292> 无法编译android7/8,错误显示jack-server服务端口(8086/8087)被占用,修改相关端口,重启服务,
此时服务无法开启<即使卸载应用,重新安装>,查看dump显示端口已经被重新获取到,但依旧无法重启服务,原因还是端口被占用。
2)java 8u282 <1.8.0_282> 及早期版本会在同机多人编译Android 版本时,会出现端口冲突,但只要修改不同的端口,即可正常开启jack-server,不影响编译。
ubuntu 18.04 Linux 5.4.0-70-generic gcc 7.5.x
1)java 8u292 在没有同机多人编译android时,jack-server 服务可正常开启。
2)该版本编译错误主要集中在
flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertioncnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.Aborted (core dumped),
但一般只要执行如下命令即可编译: export LC_ALL=C
3)在2)的基础上编译通过后,会出现新的问题:
3.1)在编译android 7/8代码时,目前出现编译bootloader无法开机现象<Lily和L2系列都出现了类似问题>,更换早期版本发布的emmc_appsboot.mbn文件即可开机<待确认是哪个工具包导致的>
需要注意:
1)在编译android 7/8代码时,尽量确保java版本不要高于 8u282。
2) 如果使用ubuntu 18.04及其更高linux版本编译android 7/8及其更低android版本时,注意gcc版本不要高于 7.x
2.1) 不建议使用ubuntu20.x及其以上版本, 之前有测试过无法编译modem<adsp和boot模块无法编译,高通源代码会去匹配linux版本,代码自身不带20.x相关的镜像>
3)必要的时候可以关闭linux自动更新功能
附:
1)官方关于java 8u292更新信息:<安全漏洞修复等>
2)openjdk-8u282 可以自行下载
apt install 命令安装的jdk默认路径在: /usr/lib/jvm/, 因此将如上包解压后放到: /usr/lib/jvm/下,
$ sudo tar zxvf java-8-openjdk-amd64.tar.gz -C /usr/lib/jvm/ && cd /usr/lib/jvm/
$ sudo rm -r java-1.8.0-openjdk-amd64 && sudo ln -s java-8-openjdk-amd64 java-1.8.0-openjdk-amd64
如果默认路径不在/usr/lib/jvm/下,请先查找对应的实际安装路径,可借助 which java获取相关的执行路径和安装路径
usr:~$ which java
/usr/bin/java
usr:~$ ls -la /usr/bin/java
lrwxrwxrwx 1 root root 22 Oct 30 2017 /usr/bin/java -> /etc/alternatives/java
usr:~$ ls -la /etc/alternatives/java
lrwxrwxrwx 1 root root 46 Nov 6 2017 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java