在APK Android中复制的重复文件 - 可以合并吗?

时间:2017-07-13 03:55:43

标签: android android-studio gradle build.gradle

在我的android项目中,我将两个库作为JAR包含在libs文件夹中。我将它们添加到构建Gradle中,如下所示。

dependencies {
    compile files('libs/siddhi-core-4.0.0-M13-SNAPSHOT.jar')
    compile files('libs/siddhi-execution-math-4.0.2-SNAPSHOT.jar')
}

这两个jar文件具有相同名称的文件(" org.wso2.siddhi.annotation.Extension")但内容不同。这两个文件对项目都很重要。 因为它有同名的gradle赢得了构建说法

Duplicate files copied in APK

如何将这两个文件合并为一个名称相同的文件? 这两个文件是带有类名列表的文本文件。在两个文件中,它们有两个不同的列表。所以我想将它们合并到一个具有相同名称的文本文件中的列表中。

enter image description here

4 个答案:

答案 0 :(得分:4)

最后我找到了答案。在app build gradle中,您可以指定合并冲突文件。

packagingOptions {         
    merge 'META-INF/annotations/org.wso2.siddhi.annotation.Extension'
}

详情请点击此处https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html

答案 1 :(得分:2)

您可以先从解压缩文件中解除jar文件,然后复制没有这些文件的jar, 之后编译unzip复制文件而不是实际文件,如此

task unzipJar(type: Copy) {
   from zipTree('libs/siddhi-core-4.0.0-M13-SNAPSHOT.jar')
   into ("$buildDir/libs/siddhi-core-4.0.0-M13-SNAPSHOT")
   include "**/*.class"
   exclude "org.wso2.siddhi.annotation.Extension"
}

dependencies {
   compile files('libs/siddhi-execution-math-4.0.2-SNAPSHOT.jar')
   compile files("$buildDir/libs/siddhi-core-4.0.0-M13-SNAPSHOT") {
      builtBy "unzipJar"
   }
}

请检查一下,即使我没有机会使用它,但它应该有效。

答案 2 :(得分:0)

您不能将两个文件都具有相同的名称解析。(org.wso2.siddhi.annotation.Extension)。 所以它不会起作用。 让我们说一些你如何包括两个罐子,而不是你将如何使用其中一个 即。运行时如何唯一地标识类,因为这两个类具有相同的名称空间和名称。

答案 3 :(得分:-1)

尝试这个

 dependencies {
       compile files('libs/siddhi-execution-math-4.0.2-SNAPSHOT.jar')
       compile files("$buildDir/libs/siddhi-core-4.0.0-M13-SNAPSHOT") {
          builtBy "unzipJar"
       }
    }