Mon projet fonctionnait bien. Lorsque j'ai ajouté facebook sdk à mon projet, j'ai une erreur comme celle-ci. J'ai essayé de nombreuses façons de résoudre ce problème, mais je ne l'ai pas fait. Que devrais-je faire?
Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
> Java.util.Zip.ZipException: duplicate entry: bolts/AggregateException.class
Mon niveau d'application est ci-dessous
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')
}
Et voici le build.gradle de facebook
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
}
Maintenant, ils séparent les boulons-Android en boulons-applinks et boulons-tâches. Vous devez donc exclure les deux de la construction de 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';}
Cela fonctionne parfaitement pour moi !!!!
Pour moi, j'ajoutais Facebook SDK en tant que projet et le configurais en tant que dépendances.
Cependant, l’exclusion fonctionne après le passage à l’utilisation de la source maven.
Je pense que c'est uniquement pour maven, pas pour les dépendances de projet? (s'il vous plaît fournir des informations correctes si quelqu'un sait à ce sujet)
Dans Word, vous pouvez maintenant supprimer le projet et les fichiers du SDK Facebook.
n'oubliez pas d'ajouter
repositories {
mavenCentral()
}
si vous n'utilisiez pas Maven.
Donc, le build.gradle ressemble à ceci, j'ai commenté la manière du projet.
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' }
}
J'ai eu un problème similaire. C'était vraiment frustrant pour moi car tout fonctionnait bien et tout à coup cela a éclaté sans raison.
Le problème est mentionné dans duplicate entry: bolts/AggregateException.class
. C'est un choc de la bibliothèque Bolts, utilisée par Facebook et Parse.
Pour moi, le problème réside dans ces deux lignes:
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.parse.bolts:bolts-Android:1.1.4'
J'avais téléchargé les bibliothèques de Parse et les ai placées dans le dossier /libs/
. Le problème était qu'il y avait un autre fichier bolts-Android
dans ce dossier.
La solution consiste à supprimer cette bibliothèque et à conserver la partie compile 'com.parse.bolts:bolts-Android:1.1.4'
.
Dans mon cas, j'ai utilisé compile 'com.parse.bolts:bolts-Android:1.+'
au lieu d'une version spécifique. Cela prend toujours la dernière version. Ainsi, lorsque bolts
a été mis à niveau vers la version 1.2.0
, le problème semble s’être rompu de manière aléatoire, car tout à coup la version du dossier /libs/
et la version la plus récente n’étaient plus alignées.
La meilleure pratique consiste à éviter les versions de style 1.+
et à simplement vérifier et mettre à jour régulièrement la dernière version.
J'espère que ça aide quelqu'un.
pas besoin de supprimer les fichiers JAR. Dans le fichier Gradle, nous avons écrit ces deux lignes
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.parse.bolts:bolts-Android:1.1.4'
il suffit d'enlever
compile fileTree(dir: 'libs', include: ['*.jar'])
parce que nous compilons tous les fichiers jar et que nous incluons à nouveau les boulons à compiler en raison desquels l'erreur est affichée
dans mon cas, j'avais ajouté un .jar dans le code de la bibliothèque. la bibliothèque à son tour s'habitue dans l'application principale. le dex était toujours dans le fichier de cache, même si j'avais nettoyé mon projet et l'avais installé. Pour être sûr dans l'application principale, vous pouvez vérifier le nombre de bibliothèques. Le fichier de cache est "Projet -> construire -> dex-cache -> cache.xml". Si vous avez plusieurs comptes de la bibliothèque, vous devez le faire dans Android Studio -> Fichier -> Invalider le cache/redémarrer.