【发布时间】:2016-02-28 15:40:59
【问题描述】:
我正在开发一个商业 android 应用程序。 我还使用了一些在不同许可类型下获得许可的库,其中一些声明如下:
如果图书馆有一个带有归属说明的“通知”文件,您必须在分发时包含该通知
(例如,其中一个是根据 Apache License 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
到目前为止,我在 Internet 和 * 上找到的答案建议通过将以下内容添加到 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),应该包含许可和通知文件。 p>
我的问题:如何从 gradle 添加多个与许可相关的文件(例如 license.txt、notice.txt 等)进入我的项目以符合许可证(技术细节:许可证文本将被连接)?
【问题讨论】:
-
从技术角度来看,你能不能不打包东西,让每个库的所有“必须包含”的文件都在自己的目录中?我在某些应用程序中看到的另一种方法是(手动)将所有相应的许可证/通知文件组合到一个资源中并包含/显示它(如果两个或多个库共享相同的许可证版本,您应该能够将它们分组, "库 A 和库 B 包含在以下许可证中:...")。
-
@TripeHound 这是我目前作为解决方法所做的,在开发过程中我将它们排除在外,在发布时:评论所有“排除”并手动解决许可证。
-
寻找答案“packagingOptions - exclude”值得一票