【发布时间】:2014-10-18 10:56:39
【问题描述】:
我在放入 2 个 jar 文件时收到此错误 Duplicate files during packaging of APK app-debug-unaligned.apk:
httpclient-4.3.5.jar-
httpmime-4.3.5.jar在
Sync with Gradle和Run之后进入libs文件夹。
如果用户 1 jar 文件 - httpmime-4.3.5.jar,我不会收到此错误。
请帮助我如何避免此错误并且仍然可以使用上面的 2 个 jar 文件,
谢谢,
p/s : 我使用的是 Android Studio 0.8.6 版。
Error Detail
错误:打包 APK 时文件重复 ...\app\build\outputs\apk\app-debug-unaligned.apk 存档路径:META-INF/DEPENDENCIES 来源 1:...\app\libs\httpclient-4.3.5.jar 来源2:...\app\libs\httpmime-4.3.5.jar
build.gradle
android {
compileSdkVersion 20
buildToolsVersion '20.0.0'
defaultConfig {
applicationId 'com.app'
minSdkVersion 9
targetSdkVersion 20
versionCode 1
versionName '1.0'
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:support-v4:20.0.0'
compile 'com.android.support:appcompat-v7:20.0.0'
compile 'com.google.android.gms:play-services:5.2.08'
compile 'com.viewpagerindicator:library:2.4.1@aar'
compile 'de.hdodenhof:circleimageview:1.2.0'
compile files('libs/httpmime-4.3.5.jar')
}
UPDATE 我从 compile files('libs/httpmime-4.3.5.jar') 更改为使用 Maven Link。将 2 个 maven 链接放在一起后,我又遇到了同样的错误:
compile 'org.apache.httpcomponents:httpmime:4.4-alpha1'
compile 'org.apache.httpcomponents:httpcore:4.4-alpha1'
这是警告
警告:依赖 org.apache.httpcomponents:httpclient:4.4-alpha1 是 忽略调试,因为它可能与内部版本冲突 由安卓提供。 如有问题,请用jarjar重新打包更改类包
警告:依赖 org.apache.httpcomponents:httpclient:4.4-alpha1 在发布时被忽略 因为它可能与提供的内部版本冲突 安卓。 如有问题,请用jar重新打包以更改类包
请帮我解决。
SOULITION 我现在知道了很好的答案,通过添加这些行将修复 Duplicate files 错误:
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
}
【问题讨论】:
-
你可以用这个
compile 'org.apache.httpcomponents:httpmime:4.3.5'替换compile files('libs/httpmime-4.3.5.jar')。你用的是什么版本的安卓工作室?你用的是什么版本的gradle? -
@hoomi 0.8.6 版。让我看看你的 maven
-
我知道你为什么要复制依赖
compile fileTree(include: ['*.jar'], dir: 'libs')已经包含compile files('libs/httpmime-4.3.5.jar') -
我没有解决你的问题,但据我所知(如果我错了,请纠正我),排除 META-INF 的依赖意味着你仍然有您的 Jar 中的依赖项存在潜在的冲突问题,但您不告诉 Jar 里面有什么。所以反过来,编译器无法再检测到问题,并且编译时不会发出警告。这不是你想要的。您想完全排除重复的依赖项。这可以通过使用类似 compile
compile('com.foo:foo-v4:20.0.0') { exclude module: 'fuu' }的东西来完成。您将需要查看您的库... -
... 找出重复的库,然后排除它。看这里:gradle.org/docs/current/userguide/dependency_management.html - 正如@hoomi 所说,您可能会添加两次依赖项。
标签: android http jar android-studio apache-commons-httpclient