while unable tutorial studio minifyenabled merging failed error dexing dexarchivemergerexception archives application android gradle android-studio dex

unable - multidex android



Después de la actualización de AS a 1.0, obteniendo el "ID de método no en[0, 0xffff]: 65536" error en el proyecto (2)

El error significa que has alcanzado el recuento máximo de métodos en tu aplicación. Eso incluye cualquier biblioteca que use para su proyecto.

Hay dos formas de abordar el problema:

  1. Deshágase de las bibliotecas de terceros que realmente no necesita. Si usa los servicios de google play que pueden contribuir mucho al recuento de métodos. Afortunadamente, a partir de la última versión de los servicios de juegos, http://developer.android.com/google/play-services/setup.html#split del marco.
  2. Use una configuración multi dex para su aplicación.

Actualicé Android Studio a la última versión, y dejé "arreglar el proyecto" y cosas por el estilo, pero ahora mi proyecto no compila, me da

FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task '':app:dexDebug''. > com.android.ide.common.internal.LoggedErrorException: Failed to run command: D:/VGA/AndroidStudio/sdk/build-tools/21.1.1/dx.bat --dex --no-optimize --output D:/VGA/Projects/Sales-App/Android-Project/svn/android/app/build/intermediates/dex/debug --input-list=D:/VGA/Projects/Sales-App/Android-Project/svn/android/app/build/intermediates/tmp/dex/debug/inputList.txt Error Code: 2 Output: UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502) at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277) at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168) at com.android.dx.merge.DexMerger.merge(DexMerger.java:189) at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:302) at com.android.dx.command.dexer.Main.run(Main.java:245) at com.android.dx.command.dexer.Main.main(Main.java:214) at com.android.dx.command.Main.main(Main.java:106)

Sin embargo, esto no se resuelve solo por multidexing, porque cuando agregué esto:

defaultConfig { ... multiDexEnabled = true }

Esto pasa

D:/VGA/AndroidStudio/sdk/build-tools/21.1.1/dx.bat --dex --no-optimize --multi-dex --main-dex-list D:/VGA/Projects/Sales-App/Android-Project/svn/android/app/build/intermediates/multi-dex/debug/maindexlist.txt --output D:/VGA/Projects/Sales-App/Android-Project/svn/android/app/build/intermediates/dex/debug --input-list=D:/VGA/Projects/Sales-App/Android-Project/svn/android/app/build/intermediates/tmp/dex/debug/inputList.txt

Código de error: 3 Salida:

UNEXPECTED TOP-LEVEL ERROR: java.lang.OutOfMemoryError: GC overhead limit exceeded at com.android.dx.cf.code.ConcreteMethod.makeSourcePosistion(ConcreteMethod.java:254) at com.android.dx.cf.code.RopperMachine.run(RopperMachine.java:306) at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:612) at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:367) at com.android.dx.cf.code.Simulator.simulate(Simulator.java:94) at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:787) at com.android.dx.cf.code.Ropper.doit(Ropper.java:742) at com.android.dx.cf.code.Ropper.convert(Ropper.java:349) at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:280) at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:137) at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:93) at com.android.dx.command.dexer.Main.processClass(Main.java:729) at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673) at com.android.dx.command.dexer.Main.access$300(Main.java:82) at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602) 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:632) at com.android.dx.command.dexer.Main.processAllFiles(Main.java:505) at com.android.dx.command.dexer.Main.runMultiDex(Main.java:332) at com.android.dx.command.dexer.Main.run(Main.java:243) at com.android.dx.command.dexer.Main.main(Main.java:214) at com.android.dx.command.Main.main(Main.java:106)

Traté de cambiar las herramientas de compilación a la última

android { compileSdkVersion 21 buildToolsVersion "21.1.1"

Debido a que por defecto cambió a 20.0.0 que parecía usar el SDK para 4.4W, pero esto no solucionó mi problema.

¿Alguien sabe qué podría estar mal aquí?

EDITAR:

Cambiar las herramientas de compilación o compilar el SDK no solucionó el problema.

Convertir la aplicación en un proyecto multi-dex y también agregar lo siguiente

android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { ... multiDexEnabled true } ... dexOptions { incremental true javaMaxHeapSize "4g" } }

Se corrigió el proceso de compilación, sin embargo, esto todavía parece ser solo un "tratamiento", pero no una solución al problema.

No estoy seguro de si esto está relacionado, pero esta es mi lista de dependencia:

dependencies { compile fileTree(dir: ''libs'', include: [''*.jar'']) compile ''com.android.support:multidex:1.0.0'' compile ''com.android.support:appcompat-v7:21.0.2'' compile ''com.squareup:otto:1.3.5'' compile ''com.squareup.picasso:picasso:2.4.0'' compile ''com.squareup.retrofit:retrofit:1.7.1'' compile ''com.jakewharton:butterknife:6.0.0'' compile ''com.madgag.spongycastle:core:1.51.0.0'' compile ''com.madgag.spongycastle:prov:1.51.0.0'' compile ''com.madgag.spongycastle:pkix:1.51.0.0'' compile ''com.google.code.gson:gson:2.3'' compile ''commons-io:commons-io:2.4'' compile ''org.apache.httpcomponents:httpclient-android:4.3.5'' compile ''com.squareup.dagger:dagger:1.2.2'' compile ''com.squareup.dagger:dagger-compiler:1.2.2'' compile(''com.googlecode.json-simple:json-simple:1.1.1'') { exclude module: ''junit'' } compile ''com.google.android.gms:play-services:6.5.87'' }

La única nueva dependencia desde entonces ha sido la última línea, que agregué según https://developer.android.com/google/gcm/client.html así que no creo que ese sea el origen del problema.

EDIT2:

Sí, fue la fuente del problema. Como necesitaba Google Cloud Messaging , reemplacé esa dependencia con la base según http://developer.android.com/google/play-services/setup.html#split :

compile ''com.google.android.gms:play-services-base:6.5.87''

Y solucionó el problema. Gracias por la ayuda.

EDIT3:

A partir de los servicios de juego 7.0.0, el GCM está en

compile ''com.google.android.gms:play-services-gcm:7.0.0''

EDIT4:

Play Services actualizado a 7.3.0. Consulte la última versión aquí: http://developer.android.com/google/play-services/setup.html#split


Estoy eliminando estos problemas y en mi caso usé este enlace para superar ese error con éxito ... !!!

El límite de DEX 64k ya no es un problema, casi

Para resumir, agregando soporte multidex:

En caso de

UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502) at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277) at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168) at com.android.dx.merge.DexMerger.merge(DexMerger.java:189) at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:302) at com.android.dx.command.dexer.Main.run(Main.java:245) at com.android.dx.command.dexer.Main.main(Main.java:214) at com.android.dx.command.Main.main(Main.java:106)

Google decidió lanzar una solución oficial para esto en la forma de la Biblioteca de soporte MultiDex.

dependencies { ... compile ''com.android.support:multidex:'' ... }

A continuación, habilite el multidexing configurando el marcador multiDexEnabled en la sección buildType o productFlavor de su configuración gradle.

defaultConfig { ... multiDexEnabled true ... }

Luego, dependiendo de su proyecto, tiene 3 opciones:

Si no ha creado su propia clase de aplicación, simplemente declare android.support.multidex.MultiDexApplication como su clase de aplicación en AndroidManifest.xml

.... android:name="android.support.multidex.MultiDexApplication" ...

Si ya tiene su propia clase de aplicación, amplíe android.support.multidex.MultiDexApplication lugar de android.app.Application

Si su clase de Aplicación extiende alguna otra clase y no desea o no puede cambiarla, anule attachBaseContext() como se muestra a continuación:

public class MyApplication extends FooApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }

Su proceso de compilación podría quedarse sin memoria. Para solucionarlo, configure las siguientes opciones de dex en el cierre ''android'' -

dexOptions { incremental true javaMaxHeapSize "4g" }

Más información sobre multidex está aquí: http://developer.android.com/tools/building/multidex.html

Otro enlace que ayuda a resolver estos errores: Referance Link