如何解决“在APK META-INF / *中复制的重复文件”
我正在一个商业的Android应用程序工作。 我也使用一些许可证types不同的许可证库,其中一些说明如下:
如果图书馆有归属注意事项的“注意”文件,则您在分发时必须注明
(其中之一是例如Apache许可证2.0许可 )。
有不止一个图书馆。 当我用Gradle或Android 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.txt , notice.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'}