【发布时间】:2015-06-30 09:02:17
【问题描述】:
我将 2 个 Apache 许可库包含到我的 Android 应用程序中,当我尝试生成应用程序时,我遇到了臭名昭著的“打包过程中文件重复”错误。
正如很多地方 (e.g.) 所建议的那样,我第一次尝试解决的问题是排除文件,它有效并且生成了我的 apk。
然后我意识到,从 0.9.1 开始。 Gradle 包含 pickFirst 选项,用于将编译期间找到的第一个许可证放入 apk。
packagingOptions {
pickFirst 'META-INF/LICENSE.txt'
pickFirst 'META-INF/NOTICE.txt'
}
问题是,Notice.txt 仅包含有关其中一个许可库的信息,而不是两者。比如Apache Commons Codec的notice.txt是:
Apache Commons 编解码器 版权所有 2002-2011 The Apache Software 基金会
本产品包含由 The Apache Software 开发的软件 基金会 (http://www.apache.org/)。
----------------------------------- --------------------------------- src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java 包含来自的测试数据 http://aspell.sourceforge.net/test/batch0.tab.
版权所有 (C) 2002 Kevin Atkinson (kevina@gnu.org)。逐字复制 并允许在任何媒体上分发整篇文章,前提是保留此通知。
和乔达时代的:
================================================ =============================== = NOTICE 文件对应于 Apache 许可证版本 2.0 的第 4d 部分 = ==================================================== ============================ 本产品包含由 Joda.org 开发的软件 (http://www.joda.org/)。
我的问题是,有没有办法自动“合并”license 和 notice 文件?我认为这是一个常见问题,所以我想我不是第一个遇到它的人。
【问题讨论】:
-
Gradle 无法获取两个随机文本文件,意识到它们有共同点(通过某种方式),然后将它们组合成一个合法有效的文件(通过某种方式)。可能有一种 Gradle/Groovy 方式来连接它们;您需要与您的法律顾问讨论这是否值得。
-
听起来您最好编写自己的 LICENSE.txt 文件 - 您仍然需要提供一个涵盖您的应用程序的文件,对吗?
-
感谢两位cmets。是的,@Jolta 我的临时解决方案是编写我自己的许可证和通知文件,但我认为也许有一种方法可以自动执行此操作,并且如果添加了新库,则不需要手动修改我的文件。我知道这没什么大不了的,但考虑到包含 > 1 个库(可能带有许可证)的应用程序数量,我想也许有一种自动方式。