我正在使用商业Android应用程序。 我还使用了一些在不同许可证类型下许可的库,其中一些说明如下:
如果图书馆有一份带有归属说明的“NOTICE”文件,则在发布时必须包含该通知
(其中一个是在 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
我在互联网和stackoverflow上找到的答案建议从包装中删除license.txt(notice.txt或其他可能会干扰此类文件的文件),方法是在build.gradle
文件中添加以下内容:< / p>
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 ),许可证和通知文件应 包含 。
我的问题:如何从gradle添加与许可相关的多个文件(例如 license.txt , notice.txt 等)进入我的项目以符合许可证(技术细节:许可证文本将被连接)?
答案 0 :(得分:47)
如果您只有一个使用名称license.txt
的许可证(阅读:所有license.txt
副本相同),则有一个解决方案:
packagingOptions {
pickFirst 'META-INF/license.txt'
}
否则,谷歌还发布了一个Gradle插件来管理依赖项许可证。见here。我没有尝试过,但看起来它能够聚合每个依赖项,甚至生成一个显示所有这些许可证的活动。
答案 1 :(得分:32)
将以下内容添加到相应的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'
}
答案 2 :(得分:4)
我的申请遇到了同样的问题。 您需要确保没有添加任何库两次。 如果您已按照firebase文档进行操作 的 https://firebase.google.com/docs/android/setup 强>
然后你不应该在android studio里面添加firebase库 即 file-&gt;项目结构 - &gt; cloud-&gt; firebase
你只需要两者中的一个,在Android应用程序中使用firebase。
最后清理并重新运行您的应用。
答案 3 :(得分:0)
您可以在gradle see this
中添加多个许可答案 4 :(得分:0)
我认为你需要在build.gradle中只包含这些选项:
android {
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
}
}
答案 5 :(得分:0)
作为 Marc Plano-Lesay 答案的替代方案,您还可以合并文件:
packagingOptions {
merge "META-INF/license.txt"
}
答案 6 :(得分:-2)
肯定会有用
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt' }