You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API 19运行时出现java.util.zip.ZipException重复条目n.class问题求助

解决API 19环境下Jar合并重复类的问题

首先,你遇到的这个ZipException: duplicate entry: n.class错误,本质是多个依赖包中包含了完全相同的类文件——API 21环境下可能因为构建工具或Multidex的处理逻辑不同没触发,但API 19对类合并的校验更严格,所以暴露了问题。下面是一步步的排查和解决方法:

一、先定位重复类的来源

要解决重复类问题,首先得知道这个n.class到底来自哪两个Jar包。运行以下Gradle命令获取详细的构建日志:

./gradlew app:transformClassesWithJarMergingForDebug --info

在输出日志里搜索duplicate entry: n.class,旁边会明确标注这个类来自哪两个文件,比如类似这样的内容:

duplicate entry: n.class来自 [jar1路径] 和 [jar2路径]

这一步是关键,能帮你精准定位冲突的依赖。

二、根据定位结果处理重复依赖

常见的重复场景和处理方式:

  • 本地Jar和远程/项目依赖重复:你配置里同时有compile project(':Library_MobilePaymentSDK')和compile files('libs/mpaysdk-sandbox-1.0.28.jar'),这两个很可能是同一个支付SDK的不同形式(项目依赖和本地Jar),保留其中一个即可。比如如果项目依赖已经包含了SDK的全部内容,就删掉本地Jar的依赖行。
  • 两个远程依赖重复:如果是两个第三方库包含了相同的类,就用exclude语法排除其中一个的冲突模块。比如假设冲突来自某两个库,就修改依赖:
    compile('冲突的库坐标') {
        exclude group: '冲突的组名', module: '冲突的模块名'
    }
    

三、检查API 19的Multidex适配

API 19及以下版本对Multidex的支持需要额外的代码配置,只在build.gradle里开multiDexEnabled true是不够的:

  1. 修改你的Application类:
    • 要么让它继承MultiDexApplication:
      public class YourApp extends MultiDexApplication {
          // 你的应用逻辑
      }
      
    • 如果你已经继承了其他Application类,就在attachBaseContext方法里手动安装Multidex:
      @Override
      protected void attachBaseContext(Context base) {
          super.attachBaseContext(base);
          MultiDex.install(this);
      }
      
  2. 确认build.gradle里已经引入Multidex依赖:
    compile 'com.android.support:multidex:1.0.1'
    

四、尝试更新老旧依赖和构建工具

你当前用的buildToolsVersion "25.0.0"以及Firebase/Play Services 10.0.0版本都比较旧,可能存在API 19的兼容性问题:

  • 把buildToolsVersion更新到28.0.3(这是和compileSdkVersion 24兼容的稳定版本)
  • 将Firebase/Play Services版本更新到对应compileSdk的版本,比如11.0.4(适配SDK 24)

五、清理缓存重建项目

每次修改依赖或配置后,记得执行以下命令清理缓存并重新构建,避免旧缓存影响结果:

./gradlew clean
./gradlew assembleDebug

内容的提问来源于stack exchange,提问作者curious

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:59:49