Android Studio Google JARファイルが原因でGCオーバーヘッド制限超過エラーが発生する


210

OS XでAndroid Studioを使用しています。次のエラーメッセージが表示されます。

失敗:ビルドは例外で失敗しました。

  • 問題の原因:タスク ':app:preDexDebug'の実行が失敗しました。com.android.ide.common.internal.LoggedErrorException:コマンドの実行に失敗しました:/ Applications / Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --output / Users / alex / AndroidStudioProjects / SilentSMS / app / build / intermediates / pre-dexed / debug / android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/SilentSMS/app/libs/android-4.3_r2.1.jar

    エラーコード:3出力:

  UNEXPECTED TOP-LEVEL ERROR:
  java.lang.OutOfMemoryError: GC overhead limit exceeded
      at com.android.dx.cf.code.RopperMachine.getSources(RopperMachine.java:665)
      at com.android.dx.cf.code.RopperMachine.run(RopperMachine.java:288)
      at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:612)
      at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:412)
      at com.android.dx.cf.code.Simulator.simulate(Simulator.java:94)
      at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:782)
      at com.android.dx.cf.code.Ropper.doit(Ropper.java:737)
      at com.android.dx.cf.code.Ropper.convert(Ropper.java:346)
      at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:282)
      at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:139)
      at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:94)
      at com.android.dx.command.dexer.Main.processClass(Main.java:682)
      at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
      at com.android.dx.command.dexer.Main.access$600(Main.java:78)
      at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
      at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
      at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
      at com.android.dx.command.dexer.Main.processOne(Main.java:596)
      at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
      at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
      at com.android.dx.command.dexer.Main.run(Main.java:230)
      at com.android.dx.command.dexer.Main.main(Main.java:199)
      at com.android.dx.command.Main.main(Main.java:103)

私はこのライブラリを使用しています:

http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/

JARファイルをプルしてプロジェクトに追加しました-ビルドしようとしているプロジェクトは次のとおりです。

https://github.com/domi007/silentSMS/

xmsとxmxの値が低すぎるためです。私はそれらを増やしました:

/ Applications / Android Studio.app/bin/idea.vmoptionsになり、次のようになります。

-Xms256m
-Xmx1024m

しかし、それでもエラーが発生します。これは何が原因ですか?silentSMSアプリがEclipseプロジェクトであり、コードをAndroid Studioに移植したこと以外は、何も変更していません。Android Studioのスポッティングエラーに関しては、そうではなく、他のすべては問題なく見えます。

回答:


547

デクシング操作のヒープ制限を引き上げる別の方法があると思います。これをファイルのandroidクロージャーに追加しbuild.gradleます。

dexOptions {
    javaMaxHeapSize "4g"
}

それが役立つかどうかを確認します。

スコット・バルタからこの回答の礼儀)


45
4g少しやりすぎです、2g大丈夫です
Hugo Gresse

3
素晴らしい!これも私のエラーを修正しました。与えるメモリが多いほど、ビルドは速くなります。1分以上19秒になりました。
Simon

2
それでもエラーが発生する: java.lang.OutOfMemoryError:GCオーバーヘッド制限を超えました[org.gradle.api.internal.project.ant.AntLoggingAdapter] at java.util.BitSet.clone
IgorGanapolsky

7
これを追加しましたが、まだ表示されますOutOfMemoryError
チャドビンガム

8
私にとってはうまくいきませんでした、gradle.propertiesでアップする必要がありました:org.gradle.jvmargs=-XX:MaxPermSize=1024m -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize=1024m
hmac

93

私の場合、ヒープサイズを増やすには次のようにします。

Android Studio 1.1.0の使用

android {
    dexOptions {
        incremental true
        javaMaxHeapSize "2048M"
    }
}

上記のコードをBuild.gradleファイルに追加します。


4
これは、GC overhead limit exceededMultidexingを有効にした後で解決しました。例外は次のとおりでしたat com.android.dx.command.dexer.Main.runMultiDex(Main.java:334)
誰かがどこかで

これはかなりのコメントのように行っていないが、Androidのスタジオエラーが`UNEXPECTED TOPレベルのエラーを示した:java.lang.OutOfMemoryErrorをする:GCオーバーヘッドの制限は例外の場所exceeded`にしてat com.android.dx.util.FixedSizeList.<init>(FixedSizeList.java:38)、スタックの最上位だったcom.android.dx.command.dexer.Main.runMultiDex(Main.java:334) at com.android.dx.command.dexer.Main.run(Main.java:244) at com.android.dx.command.dexer.Main.main(Main.java:215) at com.android.dx.command.Main.main(Main.java:106)
誰かがどこか

1
しかし、あなたがjavaMaxHeapSizeとインクリメンタルパラメーターを提案して追加するとすぐに、Android Studioはマルチdexアプリケーションをビルドすることができました。
誰かどこか

2GBでは十分でない場合は、コモンウェアが提案する4GBを試してみます。
誰かどこか

1
ありがとう。ドキュメントに関するコメントに注意してくださいincrementalこれには多くの制限があり、機能しない場合があります。慎重に使用してください。
Ferran Maylinch

41

この新しい問題は、最新バージョンのAndroidが原因です。

プロジェクトのルートフォルダーに移動し、を開いてgradle.properties、次のオプションを追加します。

org.gradle.daemon=true

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

org.gradle.parallel=true

org.gradle.configureondemand=true

次に、これらの変更をbuild.gradleファイルに追加します。

dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
}

1
警告:android.dexOptions.incrementalプロパティは非推奨であり、ビルドプロセスには影響しません。
tir38

これで私の問題は解決しました。しかし、私は非常に大きなjava_pid1512.hprofというファイルを作成します。私はあなたのDfileオプションがそれを作成していると思いますか?それは必要であり、ファイルへのダンプを削除する方法を示すことができますか
-j2emanue

1
@ j2emanue:このファイルは、理由は「HeapDumpOnOutOfMemoryError」オプションで作成されます。docs.oracle.com/cd/E15289_01/doc.40/e15062/...
Mehlyfication

1
更新が必要な場合があります:incremental2018年末に削除されます
cuasodayleo

AS 3.4では、gradle.propertiesファイルで「org.gradle.jvmargs = -Xmx2048m -XX:MaxPermSize = 512m -XX:+ HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8」を有効にすると、問題が解決しました
JimmyFlash

4

次の方法でInstant Runを無効にします。

メニュー設定ビルドインスタントラン「インスタントランを有効にしてコードをホットスワップする」

ビルドが遅くなり、AndroidStudio gcのオーバーヘッド制限を超える原因となる大きなサイズのpidXXX.hprofファイルが作成されるのは、Instant Runだと思います。

(私のデバイスSDKは19です。)


このような大きなhprofファイルを作成したのがInstant Runであることがどのようにしてわかりましたか?GitLabサーバーで最近作成されたものに気づきましたが、インスタントランが有効になっていません。
AdamMc331

4

Android Studio 3.5.3

環境設定/設定でメモリ設定(MacではCmd + Shift + Aまたはヘルプをクリックして「メモリ設定」と入力し始めます)を見つけ、IDEヒープサイズやデーモンヒープサイズを十分に増やします。 ここに画像の説明を入力してください


1
私の日を救ってくれてありがとう。
Virendra Pal Singh


0

タスクマネージャーからすべてのJava.exeを強制的に閉じ、Android Studioを再起動し、それは私のために働いた

ここに画像の説明を入力してください


0

私にとって、うまくいった答えのどれもうまくいきませんでした。CPUが非常にハードに動作していると、コンピューターが熱くなると思います。大量のCPU(クロムなど)を消費するプログラムを閉じてラップトップを冷却した後、問題は解消しました。

参考までに、私はjava.exeプロセス(実際にはGradle関連のプロセスでした)によるCPU使用率が96%〜97%で、メモリ使用量が2,000,000Kを超えていました。


あなたの解決策は、ここで提起された特定の問題とどのように関連していますか?
kalabalik 2017

java.lang.OutOfMemoryErrorを:私は上に指定したのと同じエラーが出るGCオーバーヘッドの制限は、私は私のために、このエラーを解決して提供ソリューション超え
olNoy

0

私が使用Android Studio 3.4ていて、私のために働いた唯一のことは私のbuild.gradleファイルから次の行を削除することでした:

minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

Android Studio 3.4で使用R8full modeており、直接互換性がないためProguard


2
難読化されたビルドをリリースする必要がある場合、これは解決策ではないと思います。私はAndroid Studio 3.4gradle-5.2.1を使用しましたが、gradle-5.1.1で同様の問題が発生していましたが、プロガード構成でも問題なく動作します。minifyEnabled true
Vikas Patidar

これは私たちが望むものとは正反対です。-1
Zun、

私が言ったように、これは私にとってはうまくいき、エラーはなくなり、最終的にapkを生成することができました。他の答えはどれも私のプロジェクトでは機能しませんでした。
pableiros

Gradle を5.2.1に更新し、/ project / androidで cammandを実行します ./gradlew wrapper --gradle-version=5.2.1
Ashok Devatwal

0

私の場合、私は自分を編集します gradle.properties

注:uを有効にした場合 minifyEnabled true

この行を削除します。

android.enableR8=true

そして、この行をur build.gradleandroidblockに追加します:

  dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
    }

これが誰かを助けることを願っています:)


0

4Gは少しやりすぎです。buildGradleを変更したくない場合は、FILE->無効なキャッシュ/再起動を使用できます。

それは私にとってはうまくいきます...


0

ある時点で、の複製コピーがapply plugin: 'com.android.application'ビルドグラドルに追加されました。重複したコピーを削除し、すべての適用プラグインが一番上にあることを確認して、問題を修正しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.