He creado un nuevo proyecto en Android Studio utilizando las nuevas plantillas de proyecto proporcionadas como parte de la herramienta. Todo el código ha sido generado por Studio. Aún no he realizado ninguna modificación.
Estoy intentando ejecutar el código, pero la aplicación falla con los siguientes errores, no estoy seguro de cuál es el problema, por lo que se agradece cualquier ayuda.
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v7/app/ActionBar$Callback;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
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)
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:
C:\Users\RichardKavanagh\AppData\Local\Android\android-sdk\build-tools\19.0.1\dx.bat --dex --output D:\Android\Projects\MyHealthRecord\app\build\libs\app-debug.dex D:\Android\Projects\MyHealthRecord\app\build\classes\debug D:\Android\Projects\MyHealthRecord\app\build\dependency-cache\debug D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\android-support-v7-appcompat-5a78dab7e2789bbe64f4bc80d106ca75c04dcf6f.jar D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\classes-f9b947272e9f33ba50355b52d82755584f9c0c58.jar D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\support-v4-19.0.0-31a2c13df80d37d62ca50fec3bde6da0ca706223.jar
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v7/app/ActionBar$Callback;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
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)
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 12.948 secs
android
android-studio
Codificador BENBUN
fuente
fuente
Respuestas:
Como todos los demás dijeron aquí, la biblioteca de soporte (
com.android.support
) se incluye más de una vez en su proyecto. Intente agregar esto en subuild.gradle
nivel de raíz y debería excluir la biblioteca de soporte de ser exportada a través de otras dependencias del proyecto.configurations { all*.exclude group: 'com.android.support', module: 'support-v4' }
Si tiene más de una biblioteca de soporte incluida en dependencias como esta, es posible que desee eliminar una de ellas:
fuente
build.gradle
archivo? archivo enModule
oProject
(tiene esta líneaclasspath 'com.android.tools.build:gradle:0.9.+'
)? Por favor dígame, no puedo arreglar esto.dependencies { compile 'com.android.support:support-v4:19.1.+' compile fileTree(dir: 'libs', include: ['*.jar']) }
Esto entra en conflicto si tiene el jar de soporte en su carpeta libs. Si tiene el jar de soporte en la carpeta de bibliotecas de su proyecto y tiene la dependencia del módulo agregada para compilar 'com.android.support:support-v4:13.0.+', se lanzará la excepción UNEXPECTED_TOPLEVEL_DEPENDANCY.
fuente
compile fileTree(dir: 'libs', include: ['*.jar'])
parte de tu captura de pantalla. Comenté todas las dependencias individuales y lo conecté y solucionó mi problema.Porque puede incluir dos bibliotecas iguales en su proyecto. revisa tu archivo build.gradle.
dependencies { compile 'com.android.support:appcompat-v7:+' compile files('libs/android-support-v4.jar') }
si su archivo incluye compilar
'com.android.support:appcompat-v7:+'
ycompile files('libs/android-support-v4.jar')
, tendrá estos problemas. elimine esta oración: compile archivos ('libs / android-support-v4.jar')Así es como soluciono este problema.
fuente
El error ocurre cuando tienes la misma biblioteca / directorio incluido más de una vez en las dependencias de build.gradle. Ok, digamos que tiene una estructura de aplicación que se ve así:
Entonces tienes la “aplicación” principal y luego tienes un montón de sub-aplicaciones / módulos / bibliotecas. Las bibliotecas son: 1) gene_test_library, 2) genes_nine_old_androids_library y 3) swipe_list_view_library.
Mi nombre es Gene, por eso existen todas estas bibliotecas de "genes".
Dentro de build.gradle para "aplicación", tengo:
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:21.0.0' compile project(':libraries:gene_test_library') //compile project(':libraries:genes_nine_old_androids_library') compile project(':libraries:swipe_list_view_library') }
Dentro de build.gradle para gene_test_library, no tengo nada:
dependencies { }
Dentro de build.gradle para gene_nine_old_androids_library, tengo:
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.0' }
Dentro de build.gradle para swipe_list_view_library, tengo:
dependencies { compile 'com.nineoldandroids:library:2.4.0+' compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.0' }
Esta línea de código “compilar fileTree (dir: 'libs', incluir: ['* .jar'])” simplemente significa “hey, mira dentro de la carpeta 'libs' dentro de este módulo para ver si hay archivos jar. No tengo nada en la carpeta libs de ninguno de los módulos, por lo que puede ignorar esa línea de código.
Así que digamos que elimino el comentario de // compile project (': libraries: genes_nine_old_androids_library') en build.gradle para el módulo “app”. Entonces obtendría el error "EXCEPCIÓN INESPERADA DE NIVEL SUPERIOR:". ¿Porqué es eso?
Bueno, escribir // proyecto de compilación (': libraries: genes_nine_old_androids_library') dentro de build.gradle para "app", es lo mismo que tomar las dependencias de compilación del módulo "genes_nine_old_androids_library" y ponerlo allí. Entonces, al descomentar la declaración // compile project (': libraries: genes_nine_old_androids_library'), el módulo build.gradle para "app" se convierte en:
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:21.0.0' compile project(':libraries:gene_test_library') ***compile fileTree(dir: 'libs', include: ['*.jar'])*** ***compile 'com.android.support:appcompat-v7:21.0.0'*** compile project(':libraries:swipe_list_view_library') }
Observe cómo ahora “compile 'com.android.support:appcompat-v7:21.0.0'” aparece 2x. De ahí es de donde viene el error.
fuente
app
youcompile project(':libraries:swipe_list_view_library')
y swipe_list_view_library también incluye appcompat-v7. Entonces, terminas compilando 2 appcompat-v7app
. ¿Por qué este no arroja un error?Encontré 2 razones para este problema:
A veces es debido a múltiples bibliotecas incluidas. Por ejemplo, agrega
compilar 'com.nineoldandroids: biblioteca: 2.4.0'
en su gradle y agregue otra biblioteca que también use "nineoldandroids" en su gradle.
¿Entonces por qué?
Entonces ¿qué deberías hacer?
Evitar el límite de 65K : ¿cómo?
poner
multiDexEnabled true
en las secciones defaultConfig, buildType o productFlavor de tu archivo de compilación de Gradle.
2.En su manifiesto, agregue la clase MultiDexApplication de la biblioteca de soporte multidex al elemento de la aplicación.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.multidex.myapplication"> <application ... android:name="android.support.multidex.MultiDexApplication"> ... </application> </manifest>
Nota: Si su aplicación utiliza la clase Application, puede anular el método attachBaseContext () y llamar a MultiDex.install (this) para habilitar multidex. Para obtener más información, consulte la documentación de referencia de MultiDexApplication.
Además, este código puede ayudarlo a:
dexOptions { javaMaxHeapSize "4g" }
Ponga su gradle (android {...}).
fuente
Hola a todos, tuve el mismo problema causado por un archivo de soporte de la versión 4 duplicado que había incluido al intentar integrar el análisis. Se eliminó la inclusión adicional del directorio libs y ahora funciona bien.
fuente
Esto sucede cuando una biblioteca se compila dos veces (es decir, se agrega dos veces). Puede ser una biblioteca de soporte o cualquier otra, no importa.
El caso común es que haya agregado una declaración de compilación de una biblioteca que ya está en su
libs/
directorio. Todos los*.jar
archivos se compilan automáticamente. Por lo tanto, agregar una declaración de compilación provoca el error. Eliminar esa declaración podría solucionar este problema. Si esto no es aplicable, entonces ya tenemos algunas respuestas increíbles.fuente
Esta podría ser la respuesta más tonta, pero esto funcionó para mí:
Nota: Ninguna biblioteca mía se compiló dos veces.
fuente
Asegúrese de haber descargado Support Repository para usar la dependencia de la biblioteca de soporte en build.gradle.
Si todos estos ya están instalados, sincronice su proyecto con gradle una vez usando el botón disponible.
fuente
En mi caso, se lanzó la EXCEPCIÓN DE NIVEL SUPERIOR debido a un carácter especial en la ruta del proyecto. Acabo de cerrar el proyecto, cambió "á" a "a" y volvió a abrir el proyecto. ¡Trabajos!
fuente
De repente, sin ningún cambio importante en mi proyecto, yo también recibí este error.
Todo lo anterior no funcionó para mí, ya que necesitaba las bibliotecas de soporte V4 y V7.
Al final, debido a que hace 2 horas el proyecto se compiló sin problemas, simplemente le dije a Android Studio que RECONSTRUYA el proyecto y el error desapareció.
fuente
Tuve un problema similar cuando intenté crear una aplicación firmada para mi aplicación.
Extraño, sucedió solo cuando quería construir un apk de lanzamiento , mientras que en el apk de depuración todo funcionaba bien.
Finalmente, al mirar este hilo, verifiqué las duplicaciones de la biblioteca de soporte en build.gradle y eliminé las duplicaciones, pero esto no fue suficiente.
Tuve que hacer un proyecto limpio y solo entonces finalmente lo pude hacer funcionar.
fuente
Sé que el problema fue resuelto, pero esto podría volver a suceder y mi solución fue un poco diferente a las que encontré. En mi caso, la solución no estaba relacionada con incluir dos bibliotecas diferentes en mi proyecto. Ver código a continuación:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
Este código estaba dando ese error "Excepción de nivel superior inesperada". Arreglo el código haciendo los siguientes cambios:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 }
fuente
Resolví mi problema al agregar estos en build gradle:
defaultConfig { multiDexEnabled true dependencies { compile 'com.android.support:multidex:1.0.0'
otra solución puede ser eliminar bibliotecas innecesarias
fuente