Android Studio Gradle error "Múltiples archivos dex definir …"
Mi proyecto estaba funcionando bien, cuando he añadido facebook sdk en mi proyecto tengo un error como este, he intentado muchas maneras de arreglar esto, pero no lo hice. ¿Que debería hacer?
Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: bolts/AggregateException.class
Mi gradle de aplicación está por debajo
- Uso del API de logro de Facebook en Android
- Facebook android sdk 4.0, forma de cancelar el registro de devolución de llamada de LoginManager
- ¿Cómo detectar un evento de cierre de sesión con la API de Android de Facebook v4?
- Iniciar sesión en facebook desde mi aplicación funciona en el emulador pero no en el dispositivo
- Facebook Android API y Twitter Webview Login integración
apply plugin: 'com.android.application' android { compileSdkVersion 21 buildToolsVersion '21.1.2' defaultConfig { applicationId "com.example.myproject" minSdkVersion 9 targetSdkVersion 21 versionCode 1 versionName "1.0" multiDexEnabled = true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.3' compile project(':facebook') }
Y aquí está el facebook build.gradle
apply plugin: 'com.android.library' repositories { mavenCentral() } project.group = 'com.facebook.android' dependencies { compile 'com.android.support:support-v4:[21,22)' compile 'com.parse.bolts:bolts-android:1.1.4' } android { compileSdkVersion 21 buildToolsVersion '21.1.2' defaultConfig { minSdkVersion 9 targetSdkVersion 21 } lintOptions { abortOnError false } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] res.srcDirs = ['res'] } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } } apply plugin: 'maven' apply plugin: 'signing' def isSnapshot = version.endsWith('-SNAPSHOT') def ossrhUsername = hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : "" def ossrhPassword = hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : "" task setVersion { // The version will be derived from source project.version = null def sdkVersionFile = file('src/com/facebook/FacebookSdkVersion.java') sdkVersionFile.eachLine{ def matcher = (it =~ /(?:.*BUILD = \")(.*)(?:\".*)/) if (matcher.matches()) { project.version = matcher[0][1] return } } if (project.version.is('unspecified')) { throw new GradleScriptException('Version could not be found.', null) } } uploadArchives { repositories.mavenDeployer { beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") { authentication(userName: ossrhUsername, password: ossrhPassword) } snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") { authentication(userName: ossrhUsername, password: ossrhPassword) } pom.project { name 'Facebook-Android-SDK' artifactId = 'facebook-android-sdk' packaging 'aar' description 'Facebook Android SDK' url 'https://github.com/facebook/facebook-android-sdk' scm { connection 'scm:[email protected]:facebook/facebook-android-sdk.git' developerConnection 'scm:[email protected]:facebook/facebook-android-sdk.git' url 'https://github.com/facebook/facebook-android-sdk' } licenses { license { name 'The Apache Software License, Version 2.0' url 'https://github.com/facebook/facebook-android-sdk/blob/master/LICENSE.txt' distribution 'repo' } } developers { developer { id 'facebook' name 'Facebook' } } } } } uploadArchives.dependsOn(setVersion) signing { required { !isSnapshot && gradle.taskGraph.hasTask("uploadArchives") } sign configurations.archives } task androidJavadocs(type: Javadoc) { source = android.sourceSets.main.java.srcDirs classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) } task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { classifier = 'javadoc' from androidJavadocs.destinationDir } task androidSourcesJar(type: Jar) { classifier = 'sources' from android.sourceSets.main.java.sourceFiles } artifacts { archives androidSourcesJar archives androidJavadocsJar } afterEvaluate { androidJavadocs.classpath += project.android.libraryVariants.toList().first().javaCompile.classpath }
- Android facebook sdk no llama a la devolución de llamada después de iniciar sesión
- Facebook - Android autoriza el error de la aplicación
- ¿Cuál es el código para obtener un token actualizado de Facebook en una aplicación para Android?
- Refrescar los permisos de token en Facebook Android SDK
- Cómo enviar aplicaciones fb app como Kiwi App
- Error al inflacionar la clase com.facebook.widget.LoginButton
- Session.StatusCallback no se puede resolver con un tipo - Facebook API
- Cómo resolver las herramientas de Facebook: replace = "android: theme"?
Ahora dividen tornillos-androides en pernos-applinks y tornillos-tareas. Por lo tanto, es necesario excluir tanto de la construcción gradle
compile ('com.facebook.android:facebook-android-sdk:4.10.0'){ exclude group: 'com.parse.bolts', module: 'bolts-tasks' exclude group: 'com.parse.bolts', module: 'bolts-applinks';}
Esto funciona perfectamente para mí !!!!
Para mí, yo estaba agregando Facebook SDK como un proyecto, y lo configuró como dependencias.
Sin embargo, el trabajo de exclusión después de conmutar para utilizar la fuente maven.
Creo que es sólo para maven, no para dependencias de proyectos? (Proporcione la información correcta si alguien sabe sobre esto)
En otras palabras, ahora puede eliminar el proyecto y los archivos de Facebook SDK.
Recuerde agregar
repositories { mavenCentral() }
Si usted no estaba usando maven.
Así que el build.gradle se ve así, comenté la forma del proyecto.
repositories { mavenCentral() } dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile project(':google-play-services_lib') compile ('com.facebook.android:facebook-android-sdk:3.23.0'){ exclude module: 'bolts-android' exclude module: 'support-v4' } // compile (project(':FacebookSDK')){ // exclude module: 'bolts-android' // exclude module: 'support-v4' // } compile (project(':UserVoiceSDK')){ exclude module: 'support-v4' } }
He tenido un problema similar. Esto fue muy frustrante para mí porque todo funcionó bien y de repente se rompió sin razón.
El problema se insinúa en la duplicate entry: bolts/AggregateException.class
. Es un choque de la biblioteca Bolts, utilizado por Facebook y Parse.
Para mí, el problema radica en estas dos líneas:
compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.parse.bolts:bolts-android:1.1.4'
Había descargado las bibliotecas Parse y las había puesto en la carpeta /libs/
. El problema era que había otro archivo de bolts-android
en esa carpeta.
La solución es eliminar esa biblioteca y mantener compile 'com.parse.bolts:bolts-android:1.1.4'
.
Problema alternativo
En mi caso, he utilizado compile 'com.parse.bolts:bolts-android:1.+'
lugar de una versión específica. Esto siempre toma la última versión. Así que cuando los bolts
actualizaron a la versión 1.2.0
, la cosa pareció romper aleatoriamente porque de repente la versión en la carpeta /libs/
y la última versión ya no estaban alineadas.
La mejor práctica es evitar 1.+
versiones de estilo y simplemente seguir revisando y actualizando a la última versión de vez en cuando.
Espero que esto ayude a alguien.
No hay necesidad de eliminar los archivos jar. En el archivo Gradle hemos escrito estas dos líneas
compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.parse.bolts:bolts-android:1.1.4'
Solo quita
compile fileTree(dir: 'libs', include: ['*.jar'])
Porque estamos compilando todos los archivos jar y luego de nuevo incluyendo los pernos para compilar debido a que el error se muestra
En mi caso el i había agregado un .jar en el código de la biblioteca. La biblioteca a su vez se utiliza en la aplicación principal. El dex estaba todavía en el archivo de caché incluso si había limpiado mi proyecto y lo había instalado. Para estar seguro en la aplicación principal puede comprobar el recuento de la biblioteca. El archivo de caché es "Project -> build -> dex-cache -> cache.xml". Si tienes varios recuentos de la biblioteca entonces necesitas hacer esto en Android Studio -> File -> invalidate cache / restart
- Android WebView setCertificate emite problemas de SSL
- ¿Dispositivos Samsung compatibles con setTypeface (Typeface.Italic)?