Ubuntu 18.04编译Android8.1.0源码流程及问题记录

0.293字数 440阅读 1603

之前写过一篇Mac先编译Android源码流程的文章,最近公司给配了性能不错的Linux台式,所以就把工作转移到Linux上,相比Mac,Linux问题更少,更顺手些。

1.设置 Linux编译环境

没什么好说的,照着https://source.android.com/setup/build/initializing#setting-up-a-linux-build-environment设置环境就好。

2.下载源码

这里推荐 清华大学TUNA 协会- Home
这里下载源码,具体地址是https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 。为了加快下载和避免无法访问Google这种蛋疼的问题出现,也推荐使用tuna的git-repo镜像

使用repo sync同步时,不建议使用多线程即repo sync -j4 这样同步 ,我在这样使用的过程中经常性遇到git多线程操作报错导致同步暂停的问题。

3.编译源码

当一切进行的非常顺利的时候,有种编译源码也会一帆风顺的错觉。事实是Ubuntu 18.04编译Android8.1.0源码会遇到一个问题

[  5% 3232/63193] Lex: applypatch <= bootable/recovery/edify/lexer.ll
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: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
Aborted (core dumped)
[  5% 3239/63193] target StaticLib: li...IES/libv8src_intermediates/libv8src.a)
ninja: build stopped: subcommand failed.
14:04:56 ninja failed with: exit status 1
build/core/main.mk:21: recipe for target 'run_soong_ui' failed
make: *** [run_soong_ui] Error 1

解决方案:在make之前调用export LC_ALL=C
参考:
https://stackoverflow.com/questions/51324238/aosp-build-stopped-subcommand-failed?answertab=active#tab-top

我的台式CPU是i7-7700,4核8线程,使用make -j8的过程中还是可以看到CPU有些时候并没有完全跑满,这里可以考虑使用make -j8make -j16之间的命令来编译。

现在就可以正确编译了,接下来要做的就是等啦。对比之前用Macbook Pro编译需要十几个小时,这次只用了01:58:28。Linux大法好!

推荐阅读更多精彩内容