我在一个商业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
Run Code Online (Sandbox Code Playgroud)
我在互联网和stackoverflow上找到的答案建议从包装中删除license.txt(notice.txt或其他可能会干扰的文件),方法是添加build.gradle以下文件:
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'
}
Run Code Online (Sandbox Code Playgroud)
请参阅示例:Android Studio 0.4在APK META-INF/LICENSE.txt中复制的重复文件
根据这些库的许可证(例如Apache License 2.0),应包含许可证和通知文件.
我的问题: 如何将与许可相关的多个文件(例如license.txt,notice.txt等)从gradle添加到我的项目中以符合许可(技术细节:许可文本将被连接)?
我正在尝试按照这些说明将Google Translate客户端库添加到我的Android项目中,这告诉我将此行添加到我的库项目的build.gradle中的依赖项(这是我的应用程序项目的依赖项):
compile group: 'com.google.cloud', name: 'google-cloud-translate', version: '0.4.0'
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我收到了这个错误:
Error:Execution failed for task ':typeSmart:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE
File1: C:\Users\Barry\.gradle\caches\modules-2\files-2.1\com.google.auto.value\auto-value\1.1\f6951c141ea3e89c0f8b01da16834880a1ebf162\auto-value-1.1.jar
File2: C:\Users\Barry\.gradle\caches\modules-2\files-2.1\org.codehaus.jackson\jackson-core-asl\1.9.11\e32303ef8bd18a5c9272780d49b81c95e05ddf43\jackson-core-asl-1.9.11.jar
File3: C:\Users\Barry\.gradle\caches\modules-2\files-2.1\com.google.inject\guice\4.0\f990a43d3725781b6db7cd0acf0a8b62dfd1649\guice-4.0.jar
Run Code Online (Sandbox Code Playgroud)
我理解这个错误在技术上意味着什么,但不是为什么它出现在这种情况下.我试图通过packagingOptions在我的build.gradle中为每个答案(和其他人)添加一个块来抑制它,但它没有帮助(加上它是非法的).
Google似乎不太可能发布内部不一致的API.问题可能与我的环境有关.我的应用程序包含一个包含大部分代码的库模块.它是app模块的依赖项.我怀疑这与它有关.
我正在使用:Gradle 2.14.1; Android Studio 2.2.2; 构建工具25.0.0.
您是否已成功将Google翻译客户端库添加到Android项目中?如果是这样,怎么样?
提前致谢...