GC genel masraf sınırını aşan Android Studio Google JAR dosyası hataya neden oldu


210

OS X'te Android Studio kullanıyorum. Bu hata mesajını alıyorum:

FAILURE: Derleme bir istisna dışında başarısız oldu.

  • Neler yanlış gitti: ': app: preDexDebug' görevi için yürütme başarısız oldu. com.android.ide.common.internal.LoggedErrorException: Komut çalıştırılamadı: / Applications / Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --output / Kullanıcılar / alex / AndroidStudioProjeler / SilentSMS / app / build / ara ürünler / pre-dexed / debug / android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/SilentSMS/app/libs/android-4.3_r2jar..

    Hata Kodu: 3 Çıktı:

  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)

Bu kütüphaneyi kullanıyorum:

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

JAR dosyasını çektim ve projeme ekledim - oluşturmaya çalıştığım proje:

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

Anlıyorum çünkü benim xms ve xmx değerlerim çok düşük. Onları bende arttırdım:

/ Applications / Android Studio.app/bin/idea.vmoptions şimdi şöyle diyor:

-Xms256m
-Xmx1024m

Ancak yine de hatayı alıyorum. Bunun nedeni ne olabilir? Bir Eclipse projesi olan silentSMS uygulamasının yanı sıra kodun Android Studio'ya taşınması dışında hiçbir şey değiştirmedim. Android Studio tespit hataları açısından - olmuyor ve her şey iyi görünüyor.

Yanıtlar:


547

Bence dexing operasyonunun yığın limitini yükseltmenin ayrı bir yolu var. Bunu dosyanızdaki androidkapanışınıza ekleyin build.gradle:

dexOptions {
    javaMaxHeapSize "4g"
}

ve bunun yardımcı olup olmadığına bakın.

( Scott Barta'nın bu cevabının izniyle )


45
4gbiraz abartılı, 2gtamam
Hugo Gresse

3
Fantastik! Bu da benim hatamı düzeltti. Ne kadar çok bellek veririm, derlemenin o kadar hızlı gittiğini görüyorum. 1 dakikadan 19 saniyeye gittim.
Simon

2
Hala hatayı alıyorum: java.lang.OutOfMemoryError: GC genel yük limiti aşıldı [org.gradle.api.internal.project.ant.AntLoggingAdapter] java.util.BitSet.clone
IgorGanapolsky 17:16

7
Bunu ekledim, ama hala görüyorumOutOfMemoryError
Chad Bingham

8
benim için çalışmadı, gradle.properties kadar gerekli:org.gradle.jvmargs=-XX:MaxPermSize=1024m -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize=1024m
hmac

93

Benim durumumda, yığın boyutunu artırmak için şöyle görünür:

Android Studio 1.1.0'ı kullanma

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

Yukarıdaki kodu Build.gradle dosyanıza koyun .


4
Bu, GC overhead limit exceededMultidexing'i etkinleştirdikten sonra üstesinden gelmeye çalıştı . İstisna vardıat com.android.dx.command.dexer.Main.runMultiDex(Main.java:334)
Birisi

bu bir yorum kadar güzel olmayacak, ancak Android Studio hatası `` BEKLENMEYEN ÜST DÜZEY HATASI: java.lang.OutOfMemoryError: GC genel yük sınırı aşıldı` İstisna yeri at com.android.dx.util.FixedSizeList.<init>(FixedSizeList.java:38)yığının üstündeydi ve en üsttecom.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)
Birisi

1
Ancak eklediğimde, javaMaxHeapSize ve artımlı parametreleri önerdiyseniz, Android Studio multi-dexed uygulamasını oluşturabildi.
Birisi

2gb bir nokta yeterli değilse, o zaman ortak yazılım önerilen 4gb deneyeceğim.
Birisi

1
Teşekkürler. Dokümanların ne hakkında söylediklerine dikkat edin incremental: Bunun birçok sınırlaması vardır ve çalışmayabilir. Dikkatli kullanın.
Ferran Maylinch

41

Bu yeni sorun, Android'in en son sürümünden kaynaklanıyor.

Proje kök klasörünüze gidin, açın gradle.propertiesve aşağıdaki seçenekleri ekleyin:

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

Ardından şu değişiklikleri build.gradledosyanıza ekleyin :

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

1
Uyarı: android.dexOptions.incrementalÖzellik kullanımdan kaldırılmıştır ve oluşturma işlemi üzerinde hiçbir etkisi yoktur.
tir38

bu benim sorunumu çözdü. ancak i; ts, çok büyük olan java_pid1512.hprof adlı bir dosya oluşturuyor. Dfile seçeneği oluşturuyor sanırım? gerekli ve dosyaya dökümü kaldırmak nasıl gösterebilir
j2emanue

1
@ j2emanue: Bu dosya "HeapDumpOnOutOfMemoryError" seçeneği nedeniyle yaratılmıştır: docs.oracle.com/cd/E15289_01/doc.40/e15062/…
Mehlyfication 11:17

1
Güncellenmesi gerekebilir: incremental2018 sonunda silinir
Cuasodayleo

AS 3.4'te gradle.properties dosyasındaki "org.gradle.jvmargs = -Xmx2048m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8" 'in etkinleştirilmesi sorunu çözdü
JimmyFlash

4

Anında Çalıştırmayı şu yolla devre dışı bırakıyorum:

Menü TercihiOluşturAnında Çalıştır "Çalışırken değiştirilebilir kodda Anında Çalıştırmayı etkinleştir"

Ben inşa yavaş yapar ve AndroidStudio gc havai sınır aşıldı neden büyük boy pidXXX.hprof dosyası oluşturur Anında Çalıştır olduğunu tahmin.

(Cihazım SDK'sı 19'dur.)


Bu kadar büyük bir hprof dosyası oluşturan Anında Çalıştırma olduğunu nasıl buldunuz? GitLab sunucumuzda yakın zamanda bir tane oluşturulduğunu fark ettim, ancak anında çalıştırmayı etkinleştirmedik.
AdamMc331

4

Android Studio 3.5.3

Tercihler / Ayarlar altında Bellek Ayarları'nı (Cmd + Üst Karakter + A) bulun veya Yardım'a tıklayın ve "Bellek Ayarları" yazmaya başlayın ve IDE Yığın Boyutu ve / veya Daemon Yığın Boyutunu memnuniyetinize göre artırın resim açıklamasını buraya girin


1
Teşekkürler günümü kurtardın.
Virendra Pal Singh

1

Bunu build.gradle dosyasına ekleyin

dexOptions {
   javaMaxHeapSize "2g"
}

0

Tüm Java.exe'yi taskmanger'dan kapattım, Android Studio'yu yeniden başlattım ve benim için çalıştı

resim açıklamasını buraya girin


0

Benim için çalıştığım cevapların işe yaramadığını gördüm. CPU'nun çok sıkı çalışmasının bilgisayarı sıcak hale getirdiğini tahmin ettim. Çok miktarda CPU (krom gibi) tüketen ve dizüstü bilgisayarımı soğutan programları kapattıktan sonra sorun ortadan kalktı.

Başvuru için:% 96 -% 97'de CPU ve 2.000.000K üzerinde bir java.exe işlemi (bellekle ilgili işlem olan) tarafından Bellek kullanımı vardı.


Çözümünüzün burada ortaya çıkan SPECIFIC problemiyle ilişkisi nedir?
kalabalik

Yukarıda belirtilen aynı hatayı alıyorum: java.lang.OutOfMemoryError: GC genel yükü aşıldı Teklif ettiğim çözüm benim için bu hatayı çözdü
olNoy

0

Ben kullanıyorum Android Studio 3.4ve benim için çalıştı tek şey benim şu satırları kaldırmak oldu build.gradledosyası:

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

Çünkü Android Studio 3.4kullanıyor R8içinde full modeve uyumlu direkt değilProguard


2
Bence şaşırmış bir yapı salıvermeniz gerektiğinde bu bir çözüm değil. Ben kullandım gradle-5.2.1 ile Android Studio 3.4 ve hatta birlikte para cezası çalışıyor minifyEnabled trueiken yanlısı bekçi ile yapılandırma gradle-5.1.1 benzer sorunlar yaşıyordu.
Vikas Patidar

Bu bizim istediğimiz şeyin tam tersidir. -1
Zun

Dediğim gibi, bu benim için çalıştı ve hata gitti ve sonunda apk üretebildim. Diğer cevapların hiçbiri projemde işe yaramadı.
pableiros

/ proje / android ./gradlew wrapper --gradle-version=5.2.1
Ashok Devatwal

0

benim durumumda, Düzenleme gradle.properties:

not: u etkinleştirirseniz minifyEnabled true:

bu satırı kaldır:

android.enableR8=true

ve bu satırları ur build.gradle, androidblock olarak ekleyin :

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

Umarım bu yardım eder :)


0

4g biraz abartıldığında, buildGradle'ı değiştirmek istemiyorsanız FILE -> Geçersiz önbellek / yeniden başlatma kullanabilirsiniz.

Bu benim için iyi çalışıyor ...


0

Bir noktada, apply plugin: 'com.android.application'derleme sürümüne yinelenen bir kopyası eklendi. Yinelenen kopyayı kaldırmak ve tüm uygulama eklentilerimin üstte olduğundan emin olmak benim için sorunu çözdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.