我正在开发一个商业 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 和 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),应该包含许可和通知文件。 p>
我的问题:如何从 gradle 添加多个与许可相关的文件(例如 license.txt、notice.txt 等)进入我的项目以符合许可证(技术细节:许可证文本将被连接)?
最佳答案
如果您只有一个使用名称 license.txt
的许可证(阅读:所有 license.txt
副本都是相同的),则有一个解决方案:
packagingOptions {
pickFirst 'META-INF/license.txt'
}
否则,Google 还发布了一个 Gradle 插件来管理依赖项许可证。见 here .我没有尝试过,但它看起来能够聚合每个依赖项,甚至生成一个显示所有这些许可证的 Activity 。
关于java - 如何解决 "Duplicate files copied in APK META-INF/*",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33923461/