私の Android プロジェクトは、大量の RAM を搭載した Windows 開発マシンで正常にビルドされます。しかし、単純な Docker コンテナー (FROM ubuntu:xenial + Android SDK) では、タスクの実行中に gradle ビルド (./gradlew assembleTrunkDebug) が 58% で失敗します。
transformClassesWithPreJackPackagedLibrariesForTrunkDebug
--stacktrace --debug を使用しても、エラーから得られるほとんどは次のとおりです。
Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
私が気づいたいくつかの奇妙な点があります: docker コンテナーのインスタンス化に渡すメモリ引数は問題ではありません。常に同じメモリ統計が表示されます。
Tasks: 2 total, 1 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1019776 total, 860604 free, 88840 used, 70332 buff/cache
KiB Swap: 1168688 total, 853640 free, 315048 used. 824484 avail Mem
私は通常、次のようなことをしています:
docker run -it --volume=/Users/MyUser/code/localDebugRepo:/localDebugRepo --workdir="/localDebugRepo" --memory="2048m" --memory-swap="2048m" 66b48030ee34 /bin/bash
しかし、私はより少ないメモリと同じメモリスワップまたはより多くの総メモリを渡そうとしましたが、常に Mem: 1019776 と Swap: 1168688 が表示されます。
また、タスク マネージャーで、VBoxHeadless.exe が 41 MB の RAM しか使用していないことに気付きました。不幸なタスクが実行されている間 (クラッシュするまでに長い時間がかかります)、RAM の使用量は変わりませんが、ディスク転送は膨大であり、ますます消費するだけです (SSD ドライブ上にあるため)。
Android は、Jack と Jill が最新の SDK に使用する新しいビルド ツールは、少なくとも 1536m のメモリを使用できるようにする必要があることを示唆しています。しかし、Docker イメージは最大 2048m で実行する必要があり、スワップを縮小できなかったことを考えると、何か問題があると感じています。
では、この一貫したエラーの原因となった可能性のある考えはありますか?