【问题标题】:Duplicate files during packaging of APK app-debug-unaligned.apkAPK app-debug-unaligned.apk 打包过程中文件重复
【发布时间】: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 GradleRun 之后进入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


【解决方案1】:

你可以用这个编译'org.apache.httpcomponents:httpmime:4.3.5'替换compile files('libs/httpmime-4.3.5.jar')

另外,您正在复制依赖项 compile fileTree(include: ['*.jar'], dir: 'libs') 已经包含 compile files('libs/httpmime-4.3.5.jar')

【讨论】:

  • 我在放置 2 个 maven 链接后再次遇到同样的错误,请帮助我如何解决这个错误。如果放1个maven链接,没关系。我不会接受你的问题,因为我希望很多人告诉我如何解决。谢谢。
  • 你放的两个maven链接是什么?
  • 问题是Android已经在使用apache httpclient了。你有什么理由要重新导入它吗?
  • 我已经在我的问题中更新了我的解决方案。我不知道为什么。你知道吗?
  • 只需删除 httpclient maven 行并删除 jar 文件。除非您需要旧版本中没有的新功能,否则您确实需要重新导入它
【解决方案2】:

将以下代码添加到依赖项中

编译组:'org.apache.httpcomponents',名称:'httpclient-android',版本:'4.3.5' 编译(组:'org.apache.httpcomponents',名称:'httpmime',版本:'4.3.5'){ 排除模块:'org.apache.httpcomponents:httpclient' }

现在如果你运行它会告诉你为什么它告诉重复可能是因为 META-INF/NOTICE、META-INF/LICENSE,添加第一次再次运行它可能会显示其他类型。 在 android 部分下添加如下所有内容 包装选项 { 排除 'META-INF/LICENSE.txt' 排除“元信息/通知” 排除“元信息/许可证” }

肯定能解决你的问题。

在构建之前从系统中删除所有依赖文件。

【讨论】:

  • ~"从系统中删除所有依赖文件"。这如何适用于 gradle 构建?
  • 不使用 gradle 构建。 gradle 在您的系统中下载重复的 jar。在再次构建项目之前,我们需要从系统中物理删除 jar 文件的文件夹。
【解决方案3】:

请将此更新到您的 build.gradle 文件中。

    packagingOptions { 
     exclude 'META-INF/LICENSE.txt' 
     exclude 'META-INF/NOTICE.txt' 
 }

【讨论】:

    【解决方案4】:

    更新您的 build.gradle 并添加以下行

    android{
        .
        .
        .
        packagingOptions {
            exclude 'META-INF/license.txt'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/notice.txt'
            exclude 'META-INF/NOTICE'
        }
    }
    

    这将修复此错误。我遇到了同样的错误,这样做修复了它。

    【讨论】:

    • 有时您需要添加 exclude 'META-INF/DEPENDENCIES'
    • 你也应该添加 'exclude 'META-INF/LICENSE.txt'' ' exclude 'META-INF/NOTICE.txt''
    • @SadeqShajary 你实际上没有......只有上述文件足以解决这个错误
    【解决方案5】:

    我更新了 gradle 现在它可以工作了

    包装选项 { 排除“元信息/依赖项” 排除“元信息/许可证” 排除 'META-INF/LICENSE.txt' 排除 'META-INF/NOTICE.txt' }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 2015-08-02
      • 2013-09-14
      • 2015-08-02
      • 2015-12-20
      相关资源
      最近更新 更多