J'utilise Android Studio sur OS X. Le message d'erreur suivant s'affiche:
ECHEC: La construction a échoué avec une exception.
Ce qui s'est mal passé: L'exécution a échoué pour la tâche ': app: preDexDebug'. com.Android.ide.common.internal.LoggedErrorException: Échec d'exécution de la commande:/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 /Utilisateurs/alex/AndroidStudioProjects/SilentSMS/applibs/Android-SMS/app/libs/Android-
Code d'erreur: 3 Sortie:
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)
J'utilise cette bibliothèque:
http://grepcode.com/snapshot/repository.grepcode.com/Java/ext/com.google.Android/android/4.3_r2.1/
J'ai extrait le fichier JAR et l'a ajouté à mon projet. Le projet que je tente de construire est le suivant:
https://github.com/domi007/silentSMS/
Je comprends que c’est parce que mes valeurs xms et xmx sont trop basses. Je les ai augmentés en:
/ Applications/Android Studio.app/bin/idea.vmoptions afin qu’il indique maintenant:
-Xms256m
-Xmx1024m
Cependant, j'ai toujours l'erreur. Qu'est-ce que cela pourrait être causé? Mis à part que l'application silentSMS est un projet Eclipse et que je transfère le code sur Android Studio, je n'ai rien changé. En ce qui concerne Android Studio, repérer les erreurs - ce n’est pas le cas, et tout le reste semble aller.
Je pense qu'il existe un moyen distinct d'augmenter la limite de tas de l'opération dexing. Ajoutez ceci à votre fermeture Android
dans votre fichier build.gradle
:
dexOptions {
javaMaxHeapSize "4g"
}
et voir si cela aide.
(idée fournie par cette réponse de Scott Barta )
Dans mon cas, augmenter le taille de tas ressemble à ceci:
Utilisation de Android Studio 1.1.0
Android {
dexOptions {
incremental true
javaMaxHeapSize "2048M"
}
}
Mettez le code ci-dessus dans votre fichier Build.gradle .
Ce nouveau problème est dû à la dernière version d'Android.
Accédez au dossier racine de votre projet, ouvrez gradle.properties
et ajoutez les options suivantes:
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
Ajoutez ensuite ces modifications dans votre fichier build.gradle
:
dexOptions {
incremental = true
preDexLibraries = false
javaMaxHeapSize "4g" // 2g should be also OK
}
Je désactive mon exécution instantanée par:
Menu Préférence → Construire → Exécution instantanée "Activer l'exécution instantanée au code d'échange à chaud"
Je suppose que c’est l’exécution instantanée qui ralentit la construction et crée un fichier pidXXX.hprof de grande taille, ce qui entraîne le dépassement de la limite de temps système d’AndroidStudio gc.
(Le SDK de mon appareil a 19 ans.)
Ajouter ceci au fichier build.gradle
dexOptions {
javaMaxHeapSize "2g"
}
Pour moi, aucune des réponses que j'ai trouvées ici n'a fonctionné. J'ai deviné que le fait de travailler avec le processeur rend l'ordinateur très chaud. Après avoir fermé les programmes qui consomment de grandes quantités de ressources processeur (comme Chrome) et refroidi mon ordinateur portable, le problème a disparu.
Pour référence: j'ai eu le processeur sur 96% -97% et l'utilisation de la mémoire plus de 2.000.000K par un processus Java.exe (qui était en fait un processus lié graduel).
J'utilise Android Studio 3.4
et la seule chose qui a fonctionné pour moi était de supprimer les lignes suivantes de mon fichier build.gradle
:
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
Parce que Android Studio 3.4
utilise R8
dans full mode
et n'est pas directement compatible avec Proguard