编译Android8.1.0. AOSP遇到的问题(Communication error with Jack server)(Out of memory error)

编译AOSP遇到的问题

权限遭拒 
由于博客使用了外部硬盘作为out编译输出,make时提示Permission is denied。这时换成sudo make即可。

使用外部磁盘做out输出:export OUT_DIR_COMMON_BASE=/media/username/外部磁盘路径/out

内存不足 
由于笔者的内存只有4G,并且最开始没有分出swap分区,导致多次内存不足编译失败,有多种日志形式都表明内存不足:

[ 34% 12287/35393] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex 
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex.rsp 
Communication error with Jack server (52). Try 'jack-diagnose' 
ninja: build stopped: subcommand failed. 
make: *** [ninja_wrapper] Error 1

[ 82% 30024/36285] Aligning zip: out/target/product/shamu/obj/SHARED_LIBRARIES/libdlext_test_runpath_zip_zipaligned_intermediates/libdlext_test_runpath_zip_zipaligned.zip 
[ 82% 30025/36285] Import includes file: out/target/product/shamu/obj/STATIC_LIBRARIES/libverifier_intermediates/import_includes 
[ 82% 30026/36285] target thumb C++: libverifier <= bootable/recovery/asn1_decoder.cpp 
[ 82% 30027/36285] target thumb C++: libverifier <= bootable/recovery/verifier.cpp 
[ 82% 30028/36285] Export includes file: -- out/target/product/shamu/obj/STATIC_LIBRARIES/libverifier_intermediates/export_includes 
[ 82% 30029/36285] target thumb C++: libverifier <= bootable/recovery/ui.cpp 
ninja: fatal: fork: Cannot allocate memory 
make: *** [ninja_wrapper] Error 1

FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex.rsp 
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)). 
GC overhead limit exceeded. 
Try increasing heap size with Java option '-Xmx<size>'. 
Warning: This may have produced partial or corrupted output. 
[ 31% 11494/36285] host C++: libartd-compiler <= art/compiler/optimizing/graph_visualizer.cc 
[ 31% 11494/36285] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/libprotobuf-java-nano_intermediates/classes.jack 
[ 31% 11494/36285] build out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/classes.jack 
ninja: build stopped: subcommand failed.

[ 6% 2375/35393] target Java: icu4j (out/target/common/obj/JAVA_LIBRARIES/icu4j_intermediates/classes) 
Note: Some input files use or override a deprecated API. 
Note: Recompile with -Xlint:deprecation for details. 
Note: external/icu/icu4j/main/classes/core/src/com/ibm/icu/impl/Relation.java uses unchecked or unsafe operations. 
Note: Recompile with -Xlint:unchecked for details. 
[ 6% 2394/35393] host C++: libLLVMMC_32 <= external/llvm/lib/MC/MCDwarf.cppninja: fatal: fork: Cannot allocate memory 
make: *** [ninja_wrapper] Error 1

[  5% 1883/35393] Docs droiddoc: out/target/common/docs/api-stubs
FAILED: /bin/bash out/target/common/docs/api-stubs-timestamp.rsp
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000bdb80000, 72876032, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 72876032 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/michaelx/AOSP_NBD91Z/hs_err_pid508.log
[  5% 1883/35393] Docs droiddoc: out/target/common/docs/system-api-stubs
DroidDoc took 27 sec. to write docs to out/target/common/docs/system-api-stubs
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] Error 1

解决内存不足的3个办法:

  1. 增加机器内存
  2. 增加swap分区
  3. 修改prebuild/sdk/tools/jack-admin文件

第一种方式就不说了,给机器加根内存条,壕专享。 
第二种方式:增加swap分区:hancj.blog.51cto.com/89070/19791… 
第三种方式:

# 备份jack-admin
$ cp prebuild/sdk/tools/jack-admin ~/Docments/jack-admin.original

# 修改jack-admin文件
$ vim prebuild/sdk/tools/jack-admin

# start-server方法,笔者的jack-admin在443行,修改该方法中的一句话:
# JACK_SERVER_COMMAND="java -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
# 改成下面这行,增加java堆大小。
JACK_SERVER_COMMAND="java -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx8000M -cp $LAUNCHER_JAR $LAUNCHER_NAME"

以上增加的-Xmx8000M,表示允许java在运行时java堆使用最大不超过8000M内存,这个数值是笔者经历了多次测试得到的结果,2048M,4096M,依旧没通过编译,改成8000M后编译通过,可能跟笔者自身硬件限制有很大关系

另一种修改方式:修改jack-admin第29行的变量:JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding-UTF-8 -XX:+TieredCompilation}"
改成:
JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding-UTF-8 -XX:+TieredCompilation -Xmx8000M}"
但是这种修改方式仍然不好使,编译失败了。

笔者是尝试了第二,三种方式解决。

jack-server无法运行 
错误日志如下: 
[ 37% 13421/35393] Ensure Jack server is installed and started 
FAILED: /bin/bash -c "(prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-server-4.8.ALPHA.jar 2>&1 || (exit 0) ) && (JACK_SERVER_VM_ARGUMENTS=\"-Dfile.encoding=UTF-8 -XX:+TieredCompilation\" prebuilts/sdk/tools/jack-admin start-server 2>&1 || exit 0 ) && (prebuilts/sdk/tools/jack-admin update server prebuilts/sdk/tools/jack-server-4.8.ALPHA.jar 4.8.ALPHA 2>&1 || exit 0 ) && (prebuilts/sdk/tools/jack-admin update jack prebuilts/sdk/tools/jacks/jack-2.28.RELEASE.jar 2.28.RELEASE || exit 47; prebuilts/sdk/tools/jack-admin update jack prebuilts/sdk/tools/jacks/jack-3.36.CANDIDATE.jar 3.36.CANDIDATE || exit 47; prebuilts/sdk/tools/jack-admin update jack prebuilts/sdk/tools/jacks/jack-4.7.BETA.jar 4.7.BETA || exit 47 )" 
Jack server already installed in "/home/michaelx/.jack-server" 
Launching Jack server java -XX:MaxJavaStackTraceDepth=0 -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -cp /home/michaelx/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher 
Jack server failed to (re)start, try 'jack-diagnose' or see Jack server log 
No Jack server running. Try 'jack-admin start-server' 
No Jack server running. Try 'jack-admin start-server' 
[ 37% 13421/35393] target thumb C++: libicui18n <= external/icu/icu4c/source/i18n/coptccal.cpp 
[ 37% 13421/35393] target thumb C++: libicui18n <= external/icu/icu4c/source/i18n/compactdecimalformat.cpp 
[ 37% 13421/35393] target thumb C++: libicui18n <= external/icu/icu4c/source/i18n/cpdtrans.cpp 
ninja: build stopped: subcommand failed.

解决Jack server failed to (re)start办法:

$ cd /prebuild/sdk/tools/

$ jack-admin stop-server
$ jack-admin start-server
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值