我的项目工作正常,当我将facebook sdk添加到我的项目中时,我有这样的错误,我已经尝试了很多方法来解决这个问题,但我没有。我该怎么办?
Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
> java.util.zip.ZipException: duplicate entry: bolts/AggregateException.class
我的应用程序gradle在
之下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')
}
这是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:git@github.com:facebook/facebook-android-sdk.git'
developerConnection 'scm:git@github.com: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
}
答案 0 :(得分:19)
现在他们将bolt-android拆分为bolt-applinks和bolt-tasks。所以你需要将它们从gradle build中排除
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';}
这对我来说非常有用!!!!
答案 1 :(得分:15)
对我来说,我将Facebook SDK添加为项目,并将其设置为依赖项。
但是,切换到使用maven源后,排除工作。
我认为它仅适用于maven,而不适用于项目依赖项? (如果有人知道,请提供正确的信息)
换句话说,您现在可以删除Facebook SDK项目和文件。
记得添加
repositories {
mavenCentral()
}
如果你没有使用maven。
所以build.gradle看起来像这样,我评论了项目方式。
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' }
}
答案 2 :(得分:5)
我有类似的问题。这对我来说真的很令人沮丧,因为一切都很好,突然间它无缘无故地破了。
问题在duplicate entry: bolts/AggregateException.class
中暗示。这是由博士和Parse使用的Bolts图书馆的冲突。
对我来说,问题在于以下两点:
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.parse.bolts:bolts-android:1.1.4'
我下载了Parse库并将它们放在/libs/
文件夹中。问题是该文件夹中有另一个bolts-android
文件。
解决方案是删除该库并保留compile 'com.parse.bolts:bolts-android:1.1.4'
部分。
在我的情况下,我使用compile 'com.parse.bolts:bolts-android:1.+'
而不是特定版本。这始终采用最新版本。因此,当bolts
升级到版本1.2.0
时,事情似乎随机中断,因为/libs/
文件夹中的版本和最新版本突然不再对齐。
最佳做法是避免1.+
样式版本控制,并且不时检查并更新到最新版本。
希望这有助于某人。
答案 3 :(得分:4)
无需删除任何jar文件。在Gradle文件中,我们写了这两行
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.parse.bolts:bolts-android:1.1.4'
删除
compile fileTree(dir: 'libs', include: ['*.jar'])
因为我们正在编译所有jar文件,然后再次包含要编译的螺栓,因为显示错误
答案 4 :(得分:0)
在我的情况下,我在库代码中添加了一个.jar。该库反过来在主应用程序中使用。即使我已经清理了我的项目并安装了它,dex仍然在缓存文件中。为了确保在主应用程序中,您可以检查库的计数。缓存文件是“Project - > build - > dex-cache - > cache.xml”。如果您有多个库计数,那么您需要在Android Studio中执行此操作 - >档案 - >使缓存/重启无效