多项目、依赖项目在Build APK时出现duplicate entry错误

环境:

  Android Studio Version: 2.3.1

  Compile Sdk Version: API 17: Android 4.2 (Jelly Bean)

  Build Tools Version: 25.0.2


  先说说起因吧。最近有个项目的方案商提供的SDK比较棘手,方案商不打包自己的方法,几乎所有的内部参数调用都暴露给开发者。更难以接受的是所有的JNI方法都依赖于包名、路径,就是说如果我想截取他们demo里面的代码放在自己的项目使用会出现JNI方法NoImplement的error,即使so和jar包齐全也没用。

  无奈之下我只能把整个demo当作lib,通过Import Module导入到我的项目中。即我现在新建的项目是project1,里面已有名为app1的module,方案商给的demo的module是app2,我要把demo通过Import Module加到我的项目project1,这样project1就有两个module:app1,app2(项目名还是project1)。

  于是问题就来了,我 ReBuild Project 和 Run 'app' 都不会有问题,但是 Build APK的时候却报错:

  com.Android.build.api.transform.TransformException:Java.util.zip.ZipException: duplicate entry: xxx/xxx/xxx.class.

  从报错的信息来看是“重复加载”,网上搜索一下问题也大多是说jar包重复加载。我看了一下项目文件,app1\libs和app2\libs下的确都有同名的jar包,只是一个有依赖,一个没依赖(在Dependencies和gradle文件能看到)。


我的解决过程:

  我是把app2导入到app1(即app2作为lib),这个jar包是app2要使用的。然而app\lib中的jar包反而被app1依赖,app2\lib中的jar包没被app2依赖。可能是之前的同事尝试把方案商demo的代码整合到项目的时候的遗留。

  我先打开app1的Project Structure,找到Dependencies,把jar包remove,然后打开app1的gradle,把这个jar包的compile语句删除。由于这个jar包是app2依赖的,删除jar包后项目就完全没有依赖这个jar包会报错app2\lib中的jar包只存在,没Add)。报错全都在app2(app1没方法依赖这个jar包,没报错)。接着我打开app2的Project Structure,add这个jar包(也可以在app2的gradle写compile)。Rebuild Project后不报错了,Build APK也不报错了。


疑问:

  为什么app2依赖的jar包不出现在app2的Dependencies,反而出现在app1的Dependencies?即在app1\lib的jar包Add as Library,而在app2\lib的jar包反而没有Add as Library。

  Run 'app' 的时候Android Studio其实已经产生一个APK了(在 project1\app\build\outputs\apk里),为什么Build APK的时候才报错duplicate entry。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值