我在一个商业android应用程序上工作。我还使用了一些在不同许可类型下授权的库,其中一些声明如下:
如果库中有带有属性注释的“通知”文件,则在分发时必须包含该通知。
(例如,其中一个是在Apache 2.0下授权的)。
有多个库。当我使用gradle或Android Studio进行构建时,我获得了以下构建错误:
* 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
到目前为止,我在互联网和stackoverflow上找到的答案建议通过在build.gradle
文件中添加以下内容来从打包中删除license.txt(notice.txt或其他可能会干扰的文件):
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 Duplicate files copied in APK META-INF/LICENSE.txt
根据这些库的许可证(例如,Apache license 2.0 ),许可证和通知文件应该是包含的。
我的问题:如何将多个与许可相关的文件(如license.txt、notice.txt等)从gradle添加到我的项目中,以便符合许可(技术详细信息:将连接许可文本)?
发布于 2015-12-15 19:16:00
如果您只有一个名为license.txt
的许可证(阅读:所有license.txt
副本都是相同的),则有一个解决方案:
packagingOptions {
pickFirst 'META-INF/license.txt'
}
此外,谷歌还发布了一个Gradle插件来管理依赖许可证。参见here。我没有尝试过,但它看起来能够聚合每个依赖项,甚至能够生成一个显示所有这些许可证的活动。
发布于 2016-04-13 17:11:20
将以下内容添加到相应的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'
}
发布于 2016-07-18 16:24:24
我在我的应用程序中也遇到了同样的问题。您需要确保没有两次添加任何库。如果您已经遵循了firebase文档
那么您不应该在android studio中添加firebase库,即文件->项目结构->云->firebase
要在android应用程序中使用firebase,您只需执行这两个操作中的一个。
最后,清理并重新运行你的应用程序。
https://stackoverflow.com/questions/33923461
复制相似问题