Подтвердить что ты не робот

Ошибка компиляции исходного кода 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$ 

Кто-нибудь может сказать мне, почему компиляция не удалась?

4b9b3361

Ответ 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