欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sdk合并报错:app:transformResourcesWithMergeJavaResForDedug,资源文件/META-INF/MANIFEST.MF重复

程序员文章站 2022-06-19 21:16:47
...

碰到这个问题,情况是这样的:自己的sdk(libriray)里面存在三个library(三种支付的library),然后自己出包打成一个jar包,在另外一个demo中,引入这个jar包,和另外三个支付的library,结果就出现了如下报错:

sdk合并报错:app:transformResourcesWithMergeJavaResForDedug,资源文件/META-INF/MANIFEST.MF重复

意思就是说:在classes.jar和HeepayPlugin_3.5.jar中,出现了资源META-INF/MANIFEST.MF的重复文件。

按照网上的说法,在classes.jar和当前demo,以及HeepayPlugin_3.5.jar中的build.gradle中添加如下代码,就能过滤:

 packagingOptions {
        exclude 'META-INF/MAINFEST.MF'
    }

但是,不好意思,对不起,这种方法不对,解决不了,因为出的包–有冲突的2个资源文件在同一路径下!所以解决这个问题的根本原因就是要分离classes.jar和HeepayPlugin_3.5.jar 的路径。

解决方案如下:
第一步:在当前demo下,新建一个空module,命名为mylibrary,将三个支付的jar,导入其module中的lib里面,并且删掉原有的demo中的lib下的应用,编译,发现报资源性的错误,可能需要删掉module中中build.gradle里面的如下代码:

 compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'

第二步:将原有的sdk(library)引入到当前项目下,命名为devsdk,然后在devsdk的build.gradle下引用mylibrary,如下:

 compile project(':mylibrary')

第三步,在原demo中删掉所有的lib的引用,然后在其build.gradle中引用module–devsdk,如下

 compile project(':devsdk')

运行,项目,即可,最后项目结构如下
sdk合并报错:app:transformResourcesWithMergeJavaResForDedug,资源文件/META-INF/MANIFEST.MF重复

如果想把,项目结构变得更加简单,可以删掉module –devsdk和mylibrary,同时build devsdk生成classes.jar包,将新生成的classes.jar和另外三个jar一起放入到demo的lib中,即可
最终demo下的buil.gradle文件如下:

dependencies {
    compile files('libs/alipaySdk-20160223.jar')
    compile files('libs/classes.jar')
    compile files('libs/HeepayPlugin_v3.5.jar')
    compile files('libs/libammsdk.jar')
}

结构目录如下:
sdk合并报错:app:transformResourcesWithMergeJavaResForDedug,资源文件/META-INF/MANIFEST.MF重复

上一篇: 继承

下一篇: Spring的Assert断言使用