如何解决“在APK META-INF / *中复制的重复文件”

我正在一个商业的Android应用程序工作。 我也使用一些许可证types不同的许可证库,其中一些说明如下:

如果图书馆有归属注意事项的“注意”文件,则您在分发时必须注明

(其中之一是例如Apache许可证2.0许可 )。

有不止一个图书馆。 当我用GradleAndroid Studio进行构build时,我获得了以下构build错误:

* What went wrong: Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/license.txt 

直到现在我在互联网和计算器上find的答案build议从包装中删除license.txt(notice.txt或其他可能干扰这样的文件),通过添加到build.gradle文件如下:

 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' } 

例如,请参阅: Android Studio 0.4在APK META-INF / LICENSE.txt中复制的重复文件

根据这些库的许可证(例如, Apache许可证2.0 ),应该包括许可证和通知文件。

我的问题:如何将与gradle相关的许多文件(如license.txtnotice.txt等)添加到我的项目中以符合许可证( 技术细节:许可文本将被连接)?

如果您只有一个使用名称license.txt许可证,则有一个解决scheme(阅读:所有license.txt副本都是相同的):

 packagingOptions { pickFirst 'META-INF/license.txt' } 

将以下内容添加到相应的build.gradle文件中

 packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/MANIFEST.MF' } 

我面对与我的应用程序相同的问题。 你需要确保你没有添加任何库两次。 如果您已按照firebase文档https://firebase.google.com/docs/android/setup进行操作;

那么你不应该在android studio里添加firebase库,例如file-> project structure-> cloud-> firebase

你必须只做其中的一个,在你的android应用程序中使用firebase。

最后清理并重新运行你的应用程序。

你可以在Gradle中添加多个许可证, 看看这个

我认为你只需要在build.gradle中包含这些选项:

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

肯定会起作用

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