我在我的 Android 应用程序中包含了 2 个 Apache 许可的库,当我尝试生成应用程序时,我遇到了臭名昭著的“打包过程中的重复文件”错误。
我第一次尝试解决,正如很多地方所建议的那样 ( 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 Codec Copyright 2002-2011 The Apache Software Foundation
This product includes software developed by The Apache Software Foundation (http://www.apache.org/).
-------------------------------------------------------------------------------- src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java contains test data from http://aspell.sourceforge.net/test/batch0.tab.
Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org). Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
和 Joda Time 的:
============================================================================= = NOTICE file corresponding to section 4d of the Apache License Version 2.0 = ============================================================================= This product includes software developed by Joda.org (http://www.joda.org/).
我的问题是,有没有办法自动“合并”license
和notice
文件?我认为这是一个常见问题,所以我想我不是第一个遇到它的人。
最佳答案
有一个新的“合并”packagingOption,它看起来可以避免此错误,同时仍然允许您包含开源许可证等重要内容。
(我不是律师也不是 gradle 专家,所以请确保您了解如何遵守自己的许可证)
它将重复项合并到一个文件中。
例子:
packagingOptions {
merge 'META-INF/LICENSE.txt'
merge 'META-INF/LICENSE'
merge 'META-INF/NOTICE.txt'
merge 'META-INF/NOTICE'
merge 'META-INF/ASL2.0'
}
关于android - APK打包时出现重复文件,如何在gradle中包含多个license,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31133914/