错误:打包APK时出现重复的文件

4

我尝试在Android Studio上运行一个安卓Eclipse项目。

我查阅了许多互联网上的解决方案。

但仍然出现了一些问题。

Error:duplicate files during packaging of APK /home/sam/pst-adnew/panstage/build/outputs/apk/panstage-debug-unaligned.apk
 Path in archive: lib/armeabi-v7a/libmp3lame.so
 Origin 1: /home/sam/pst-adnew/panstage/build/intermediates/exploded-aar/pst-adnew/panstage_local_library/unspecified/jni/armeabi-v7a/libmp3lame.so
 Origin 2: /home/sam/pst-adnew/panstage/build/intermediates/ndk/debug/lib/armeabi-v7a/libmp3lame.so
You can ignore those files in your build.gradle:
 android {
   packagingOptions {
     exclude 'lib/armeabi-v7a/libmp3lame.so'
   }
 }
Error:Execution failed for task ':panstage:packageDebug'.
> Duplicate files copied in APK lib/armeabi-v7a/libmp3lame.so
   File 1: /home/sam/pst-adnew/panstage/build/intermediates/exploded-aar/pst-adnew/panstage_local_library/unspecified/jni/armeabi-v7a/libmp3lame.so
   File 2: /home/sam/pst-adnew/panstage/build/intermediates/exploded-aar/pst-adnew/panstage_local_library/unspecified/jni/armeabi-v7a/libmp3lame.so

我正在使用NDK Android Studio进行工作。

请帮助我。

我也尝试过解决方案。

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
    }

但是它现在不再起作用了。请帮帮我 :(

这个应用程序作为另一个应用程序的依赖项吗? - ask4solutions
当我使用第三方库时,我遇到了这个问题。通过删除 .so 文件,我解决了这个问题。 - Egos Zhang
3个回答

12

如果存在重复的库(*.so)文件,排除选项将无法帮助,因为我们无法完全排除本地二进制文件。在 packagingOptions 中还有另一种选项。它是“pickFirst”。我们可以避免重复文件错误并包含编译器遇到的第一个文件。

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
        pickFirst 'lib/armeabi-v7a/libmp3lame.so'

    }

1
谢谢。我刚花了很长时间尝试让compile.exclude在aar文件本身上工作,直到看到你的答案。我之前不熟悉pickFirst。 - matt

0
PackagingOption 部分中,也要包括 exclude 'lib/armeabi-v7a/libmp3lame.so'
packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
        exclude 'lib/armeabi-v7a/libmp3lame.so'

    }

2
谢谢,实际上我尝试过了,但它没有帮助。也许还有其他方法。 - Sâm Nguyễn Văn

0

我遇到了类似的问题,原因是一个模块在冗长的 gradle 文件中被包含了两次,很难注意到。

.
.
.
compile project(path: ':common', configuration: 'debug')
.
.
.
compile project(path: ':common')
.
.
.

所以第一次是将文件添加到调试文件夹中,第二次是添加到发布文件夹中。

一旦发现问题,我删除了第二行,因为我们需要在调试版本中使用所有内容。错误消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接