OS XでAndroid Studioを使用しています。このエラーメッセージが表示されます。
FAILURE:ビルドは例外で失敗しました。
問題点:タスク ':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 /中間生成物/ pre-dexed/debug/Android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/SilentSMS/app/libs/Android-4.3_r2.1ar
エラーコード: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の発見エラーに関しては、そうではありません。それ以外はすべて問題ないようです。
デクシング操作のヒープ制限を引き上げる別の方法があると思います。これをbuild.gradle
ファイルのAndroid
クロージャに追加します。
dexOptions {
javaMaxHeapSize "4g"
}
そしてそれが役立つかどうかを確認してください。
(アイデアのおかげで この回答はScott Bartaから )
私の場合、heap-sizeを増やすには、このようになります。
Android Studio 1.1.0を使用する
Android {
dexOptions {
incremental true
javaMaxHeapSize "2048M"
}
}
上記のコードをBuild.gradleファイルに入れます。
この新しい問題は、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
}
インスタントランを無効にします。
メニュー設定→ビルド→インスタントラン「ホットスワップコードへのインスタントランを有効にする」
私はそれがビルドを遅くし、AndroidStudioのgcオーバーヘッド制限を超える原因となる大きなサイズのpidXXX.hprofファイルを作成するインスタントランであると思います。
(私のデバイスSDKは19です。)
これをbuild.gradleファイルに追加してください。
dexOptions {
javaMaxHeapSize "2g"
}
私にとって答えがうまくいかなかった私はここでうまくいったのを見た。私はCPUが非常に激しく働くことでコンピュータが熱くなると思いました。大量のCPUを消費するプログラム(クロムなど)を閉じてラップトップを冷却した後、問題は解決しました。
参考のために:私は96%-97%のCPUと、Java.exeプロセスによる2,000,000Kを超えるメモリ使用量を持っていました(実際にはgradle関連プロセスでした)。
私はAndroid Studio 3.4
と私のために働いた唯一のことを使用していますが、build.gradle
ファイルから次の行を削除することでした:
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
Android Studio 3.4
はR8
でfull mode
を使用しており、Proguard
と直接互換性がないため