尝试在Ubuntu 20.04中编译Android 8源码,记录编译过程中踩过的坑,期望给后来的同学一些解决参考。
运行环境:Ubuntu 20.04 (非虚拟机)
编译Android版本:Android 8 源码
问题1:找不到python命令
/usr/bin/env: “python”: 没有那个文件或目录
问题原因:Android 8编译需要依赖较老的python版本(py2.7),而ubuntu20只提供了python3,所以需要我们自行安装py2并将路径关联到环境变量中。
具体解决办法:
- 安装python2.7:sudo apt install python2-minimal
- 将/usr/bin/env映射至py2.7的目录:ln -s /usr/local/python-2.7.18/bin/python /usr/bin/python
参考资料:
https://blog.csdn.net/rasiel_2019/article/details/123654672
问题2:找不到库文件libncurses.so.5
prebuilts/clang/host/linux-x86/clang-4053586/bin/clang++.real: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
[ 0% 64/89441] Import includes file: out/host/linux-x86/obj/STATIC_LIBRARIES/libaapt_intermediates/import_includes
问题原因:android 8依赖的linux内核库文件较老,Ubuntu 20缺少该文件。
具体解决办法:
- 缺什么文件我们就去装什么文件。我这里缺少的是libncurses.so.5
- 一个个装太麻烦,我这里提供一个依赖较为齐全的文件命令:
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
参考资料:
https://blog.csdn.net/yinminsumeng/article/details/128642855#下载android源码
问题3:Jack server连接失败
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore /home/cmr/.jack-server/client.jks -destkeystore /home/cmr/.jack-server/client.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
Jack server failed to (re)start,try 'jack-diagnose' or see Jack server log,SSL error when connecting to the Jack server. Try 'jack-diagnose'
问题原因:Java某次更新中,将Jack Server需要的TLSv1, TLSv1.1给disable掉了
具体解决办法:
- 找到java.security文件:vim /etc/java-8-openjdk/security/java.security
- 找到该文件中的jdk.tls.disabledAlgorithms,删掉其中TLS1.0和1.1的依赖(需要root权限,否则该文件只读)
- 重启linux(切记,否则不生效)
参考资料:
https://blog.csdn.net/qq_37858386/article/details/119599118
问题4:编译报错’cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))’
FAILED: out/target/product/generic/obj/STATIC_LIBRARIES/libedify_intermediates/lexer.cpp
/bin/bash -c "prebuilts/misc/linux-x86/flex/flex-2.5.39 -oout/target/product/generic/obj/STATIC_LIBRARIES/libedify_intermediates/lexer.cpp bootable/recovery/edify/lexer.ll"
flex-2.5.39: loadlocale.c:130:_nl_intern_locale_data: ?? 'cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' ???
Aborted (core dumped)
ninja: build stopped: subcommand failed.
解决办法:
- vim build/envsetup.sh
- 在最后一行加上:export LC_ALL=C
参考资料:
https://huaweicloud.csdn.net/64edab514165333c3076b8a3.html
最后,折腾了一上午总算是编译运行成功了!