web-dev-qa-db-ja.com

Androidソースコードコンパイルエラー: "Javaオプション '-Xmx <size>'でヒープサイズを増やしてみてください" "

Android source code(Sourcecode-version:6.0.1; RAM:6G; Host system:ubuntu 14.04)、log is below :)をコンパイルしようとするとエラーが発生します:

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$ 

コンパイルが失敗した理由は誰でも教えていただけますか?

22
Eddy.Liu

同じ問題がありました。そのため、JACK_SERVER_VM_ARGUMENTS-Xmx=4gを含むように設定しようとしましたが、再度ビルドすると、ログ出力にスタートアップに含まれていないことが示されました。ダンノ、なぜ、環境変数がビルドスクリプトに正しく渡されないようです。

解決

クリーン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

cmに使用できます

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
jack-admin kill-server && jack-admin start-server

これで問題は解決しました。

48
icyerasor

Jackに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
8
user6310924

6.0にアップデートした後もこの問題が発生しました。私のコンピューターは8GBのRAMを搭載したi7ラップトップです。 v5.x以前では問題なく動作しました。

エラーメッセージが示すように、理由はメモリ不足です。 v6.xビルドでは、より多くのジャックが使用されます。私の場合、ジャックの数を1に減らすことで問題が解決しました。

8GBのRAMでコンパイルを続行できます。

$HOME/.jack-server/config.properties
    jack.server.max-service=1

[100% 19740/19740]
#### make completed successfully (11:55:27 (hh:mm:ss)) ####
7
dave

Androidビルド(7.1.2でテスト済み)は独自のプライベートバージョンのJackを使用するため(システムの別の場所にJackツールチェーンがインストールされている場合があります)、Android固有の変数を使用する必要があります。

から https://Android.googlesource.com/platform/prebuilts/sdk/+/master/tools/README-jack-server.md

(「メモリ不足エラーでジャックのコンパイルが失敗する場合:」を検索してください。)

要約する:

$ # 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...
2
ack

これも私の問題でした:JavaデフォルトのXmx設定はすでに4GB(正確には4011MB)に近かったので、問題はむしろ並行して実行されているジャックサーバーの数でした。 16GBのRAM、ただし32GB(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

Android公式ドキュメントに基づいて、古い場所と新しい場所の両方に最大数のジャックサーバーを追加します。

ジャックのトラブルシューティング:コンパイル中にコンピューターが応答しなくなった場合、または「メモリー不足エラー」でジャックのコンパイルが失敗した場合、状況を改善することができます。 $ HOME/.jackを編集し、SERVER_NB_COMPILEをより低い値に変更することによる、ジャックの同時コンパイルの数。 https://source.Android.com/source/jack.html

0
Reggie

この記事を見つけました: Building AOSP 7.x Nougat with only 8 GiB RAM


8 GiBマシンでは、最大ヒープサイズは2 GiB未満です。

$ Java -XshowSettings 2>&1  | grep Heap
    Max. Heap Size (Estimated): 1.71G

解決策

問題を理解したら、jack-serverの起動時にデフォルトのヒープサイズを変更するだけの問題でした。修正するには、~/.jack-settingsを編集し、この行を追加する必要があります

JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"

次に、jack-serverを再起動します。それ以外の場合、バックグラウンドで実行されている場合、古いXmx値を引き続き使用します。

$ prebuilts/sdk/tools/jack-admin kill-server
$ prebuilts/sdk/tools/jack-admin start-server
Launching Jack server Java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m
-cp /home/chris/.jack-server/launcher.jar com.Android.jack.launcher.ServerLauncher
0
Kamin