編譯Android sdk出錯 解決方案
用Android原始碼編譯sdk過程中出現以下錯誤:
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)
ninja: build stopped: subcommand failed.
02:59:16 ninja failed with:exit status 1
02:59:16 Unable to parse ninja entry
make: *** [run_soong_ui] Error 1
#### make failed to build some targets (14 seconds) ####
最開始懷疑是因為JVM heap size太小而導致該錯誤.
參考https://blog.csdn.net/dd864140130/article/details/51718187嘗試了以下兩種方法:
方法一:
在編譯命令之前,修改prebuilts/sdk/tools/jack-admin檔案,找到檔案中的這一行:
JACK_SERVER_COMMAND="java -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
然後在該行新增-Xmx4096m,如:
JACK_SERVER_COMMAND="java -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"
然後再執行time make -8j
方法二:
在控制檯執行以下命令:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"
out/host/linux-x86/bin/jack-admin kill-server
out/host/linux-x86/bin/jack-admin start-server
看網上也多數都是用以上兩種方法,但是我的問題都沒有解決,再次編譯仍然報錯。
最後嘗試了以下方法:
在build/envsetup.sh的最後一行新增一句話:
export LC_ALL=C
問題得以解決。