Ошибка компиляции исходного кода Android: "Попробуйте увеличить размер кучи с помощью опции java" -Xmx <size> "
Ошибка при попытке скомпилировать исходный код Android (Sourcecode-version: 6.0.1; RAM: 6G; host system: ubuntu 14.04), журнал ниже:
including ./system/netd/Android.mk ...
including ./system/security/keystore-engine/Android.mk ...
including ./system/security/keystore/Android.mk ...
including ./system/security/softkeymaster/Android.mk ...
including ./system/tools/aidl/Android.mk ...
including ./system/update_engine/Android.mk ...
including ./system/vold/Android.mk ...
including ./system/weaved/Android.mk ...
including ./system/webservd/Android.mk ...
including ./tools/external/fat32lib/Android.mk ...
Starting build with ninja
ninja: Entering directory `.'
[ 0% 1/21275] Ensure Jack server is installed and started
Jack server already installed in "/home/eddy/.jack-server"
Launching Jack server java -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -cp /home/eddy/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher
[ 0% 17/21275] host Java: conscrypt-host (out/host/common/obj/JAVA_LIBRARIES/conscrypt-host_intermediates/classes)
warning: [options] bootstrap class path not set in conjunction with -source 1.7
external/conscrypt/src/openjdk/java/org/conscrypt/Platform.java:39: warning: AlgorithmId is internal proprietary API and may be removed in a future release
import sun.security.x509.AlgorithmId;
^
external/conscrypt/src/openjdk/java/org/conscrypt/Platform.java:243: warning: AlgorithmId is internal proprietary API and may be removed in a future release
return AlgorithmId.get(oid).getName();
^
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
3 warnings
[ 0% 18/21275] host Java: signapk (out/host/common/obj/JAVA_LIBRARIES/signapk_intermediates/classes)
warning: [options] bootstrap class path not set in conjunction with -source 1.7
1 warning
[ 0% 73/21275] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
GC overhead limit exceeded
Try increasing heap size with java option '-Xmx<size>'
Warning: This may have produced partial or corrupted output.
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] Error 1
#### make failed to build some targets (14:09 (mm:ss)) ####
[email protected]:~/WORKING_DIRECTORY$
Кто-нибудь может сказать мне, почему компиляция не удалась?
Ответы
Ответ 1
У меня была та же проблема. Поэтому я попытался установить JACK_SERVER_VM_ARGUMENTS
для включения -Xmx=4g
, но при создании снова выход журнала показал, что это не было включено в запуск. Dunno, почему, кажется, что env vars не попадают в конструкцию script правильно.
Решение
Перед запуском чистой сборки Android установите JACK_SERVER_VM_ARGUMENTS
, чтобы включить -Xmx=4g
, затем остановите и запустите сервер гнезда вручную. Если вы находитесь в главном исходном дереве AOSP, выполните следующее:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
для см вы можете использовать
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
jack-admin kill-server && jack-admin start-server
Это разрешило проблему для меня.
Ответ 2
Текущий способ установки Xmx для гнезда:
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
Ответ 3
У меня также была эта проблема после обновления до 6.0. Мой компьютер - ноутбук i7 с 8 ГБ оперативной памяти. Он отлично работал с v5.x и ниже.
Причина в том, что недостаточно памяти, как указано в сообщении об ошибке. В сборке v6.x больше используется Джек. В моем случае уменьшение количества разъемов до 1 разрешило проблему.
Теперь я могу продолжить компиляцию с помощью 8 ГБ оперативной памяти.
$HOME/.jack-server/config.properties
jack.server.max-service=1
[100% 19740/19740]
#### make completed successfully (11:55:27 (hh:mm:ss)) ####
Ответ 4
Android build (протестировано с 7.1.2) использует свою собственную личную версию Jack (там может быть установлена инструментальная цепочка Jack в другом месте в системе), поэтому вам нужно использовать переменные, зависящие от Android.
От https://android.googlesource.com/platform/prebuilts/sdk/+/master/tools/README-jack-server.md:
(поиск "Если у вас возникли сбои компиляций Jack при ошибке" Недостаточно памяти ":" )
Подводя итог:
$ # Stop the Jack server
$ jack-admin stop-server
$ # apply the new setting
$ export ANDROID_JACK_VM_ARGS="-Xmx2g -Dfile.encoding=UTF-8 -XX:+TieredCompilation"
$ Finally, restart the build (do not manually start the Jack server!)
$ m # or any other build command
Система сборки должна забрать изменение и вывести строку:
Environment variable ANDROID_JACK_VM_ARGS was set, regenerating...
или (после последующего изменения):
Environment variable ANDROID_JACK_VM_ARGS was modified (-Xmx2g -Dfile.encoding=UTF-8 -XX:+TieredCompilation => -Xmx4g -Dfile.encoding=UTF-8 -XX:+TieredCompilation), regenerating...
Ответ 5
Это также была моя проблема: настройка Xmx по умолчанию java была уже близка к 4 ГБ (точно: 4011 МБ), поэтому проблема была скорее количеством запущенных параллельных серверных серверов. Моя машина имела 8 процессоров, но только 16 ГБ ОЗУ, но требовалось бы 32 ГБ (8 * 4 = 32).
Мое (немного более динамичное) решение:
MAX=$(($(free -g | awk '/^Mem:/{print $NF}') / 4))
if [ $MAX -le 0 ]; then
MAX=1
fi
echo "SERVER_NB_COMPILE=$MAX" >> ~/.jack
mkdir -p ~/.jack-server
echo "jack.server.max-service=$MAX" >> ~/.jack-server/config.properties
Он добавляет MAX-номер сервера-разъема как для старого местоположения, так и для нового местоположения на основе официального документа android:
Устранение неисправностей Jack: если ваш компьютер перестает отвечать на запросы во время компиляции или если у вас возникли сбои компиляции "Ошибка вне памяти", вы можете улучшить ситуацию, уменьшив количество одновременных компиляций Jack, отредактировав ваши $HOME/.jack и изменив значение SERVER_NB_COMPILE на меньшее значение. https://source.android.com/source/jack.html