Androidビルドで「You build has exceeded the memory limit of 4G on 1 container. 」の対処法

  • 5
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

みなさんこんにちわ。
僕は、最近まで「Nginx」のこと、

nginx.jpg

って言ってたんですけど、これ正しくないです。
えんじんえっくす」っていうのが正しいみたいなのですけど、これ無理すぎないですか?

  • IIS => あいあいえす(わかる)
  • Apatch => あぱっち(わかる)
  • Nginx => えんじんえっくす(ワカンネ)

どうも納得できないですよね。
言葉の由来とかもよくわかんないですけど、みんなコレちゃんと読めてるんですかね?!
Nginx(ぬぎんくす)っていうのが正しい気がしてて、僕が会社のエラい人だったら「Nginx(えんじんえっくす)」っていう人がいたら絶対即クビにしてますね。

Circle CIのメモリの使用量は4Gまでであり、越えるとエラーで止まる。

僕は会社のエラい人でもなんでもないので、別に誰もクビにならなくてよかったなと思いますけど、そんな僕がSlackのCircleCIチャンネルでAndroidビルドが連続して失敗を確認しましたよ。

ビルドエラーを確認すると下記のようなエラーメッセージが表示されていました。

./gradlew clean assembleDebug -PpreDexEnable=false died unexpectedly

Building 88%90% > :app:preDexDebugAction failed: ./gradlew clean assembleDebug -PpreDexEnable=false

そしてcircle CIのビルドジョブの上の方に下記メッセージが表示されてました。

You build has exceeded the memory limit of 4G on 1 container. The results of this build are likely invalid. We have taken a snapshot of the memory usage at the time, which you can find in a build artifact named memory-usage.txt. The RSS column in this file shows the amount of memory used by each process, measured in kilobytes.

つまり1コンテナのメモリ使用量は4Gまでなので、お前超えてるからコケたよってことのようです。

(解決策)省メモリビルドのために、いろいろパラメータをつければOK!

下記のように省メモリでビルドするようにすれば通りました。

circle.yml
deployment:
    master:
        branch: master
        commands:
            - ./gradlew assembleDebug -PpreDexEnable=false -Pcom.android.build.threadPoolSize=1 -Dorg.gradle.parallel=false -Dorg.gradle.jvmargs="-Xms512m -Xmx512m" -Dorg.gradle.daemon=false

それではまたどこかでお会いしましょう!

参考

Gradle assembleDebug and preDexDebug fail with CircleCI

この投稿は CircleCI Advent Calendar 201512日目の記事です。