sdk合并报错:app:transformResourcesWithMergeJavaResForDedug,资源文件/META-INF/MANIFEST.MF重复
碰到这个问题,情况是这样的:自己的sdk(libriray)里面存在三个library(三种支付的library),然后自己出包打成一个jar包,在另外一个demo中,引入这个jar包,和另外三个支付的library,结果就出现了如下报错:
意思就是说:在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')
运行,项目,即可,最后项目结构如下
如果想把,项目结构变得更加简单,可以删掉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')
}
结构目录如下:
上一篇: 继承
下一篇: Spring的Assert断言使用