在打包APK期间复制文件,如何在gradle

时间:2015-06-30 09:02:17

标签: android gradle

我在我的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版权所有2002-2011 Apache软件   基础

     

本产品包含由The Apache Software开发的软件   基金会(http://www.apache.org/)。

     

----------------------------------------------- --------------------------------- src / test / org / apache / commons / codec / language / DoubleMetaphoneTest.java   包含来自的测试数据   http://aspell.sourceforge.net/test/batch0.tab

     

版权所有(C)2002 Kevin Atkinson(kevina@gnu.org)。逐字复制    如果保留此通知,则允许在任何介质中分发整篇文章。

     

和Joda Time&#39:

  

=============================================== ==============================   = NOTICE文件对应于Apache License Version 2.0 =的第4d部分   ================================================== ===========================本产品包含由Joda.org开发的软件   (http://www.joda.org/)。

我的问题是,有没有办法合并"自动licensenotice个文件?我认为这是一个常见的问题所以我想我不是第一个面对它的人。

1 个答案:

答案 0 :(得分:0)

有一个新的“合并”包装选项看起来会避免此错误,同时仍然允许您包含重要的东西,如开源许可证。

(我不是律师而非Gradle专家,因此请确保您了解如何兑现自己的许可证)

它将重复项合并到一个文件中。

文档:https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html

示例:

 packagingOptions {
    merge 'META-INF/LICENSE.txt'
    merge 'META-INF/LICENSE'
    merge 'META-INF/NOTICE.txt'
    merge 'META-INF/NOTICE'
    merge 'META-INF/ASL2.0'
}