📜  DexArchiveMergerException 颤振 (1)

📅  最后修改于: 2023-12-03 15:14:40.588000             🧑  作者: Mango

DexArchiveMergerException 颤振

DexArchiveMergerException 是在 Android 中可能会遇到的一个异常,通常会在构建 APK 时发生。这个异常通常由多个库中包含相同类的情况引发,导致打包时出现冲突。

原因
  1. 输入的 jar 包冲突:多个 jar 包中都包含了相同的类,比如在使用 Google Play Services 和不同版本的第三方库时可能会出现这种情况。
  2. 混淆导致的问题:如果在 ProGuard 中进行混淆时没有将需要的类保留,也会出现这种问题。
解决方案
1. 排除冲突类

可以通过 exclude 的方式将一些 jar 包中的冲突类排除掉,例如:

dependencies {
    implementation('com.android.support:appcompat-v7:28.0.0') {
        exclude group: 'com.google.guava', module: 'listenablefuture'
    }
}
2. 引入 Maven 分辨率策略

使用 Maven 分辨率策略可以自动解决冲突问题,只需要在项目的 build.gradle 中配置:

configurations.all {
    resolutionStrategy {
        force 'com.google.code.gson:gson:2.8.5'
    }
}
3. 更换版本或者库

如果以上两种方法都不可行,可以考虑更换版本或者库,使用不会造成冲突的版本或者库。

4. 保留混淆

如果是由于混淆导致的问题,可以在 ProGuard 中保留这些需要保留的类,例如:

-keep class com.example.app.** { *; }
总结

DexArchiveMergerException 是 Android 中常见的打包异常,通常是由冲突类或者混淆导致的问题。解决方案包括排除冲突类、引入 Maven 分辨率策略、更换版本或者库,以及保留混淆中的需要保留的类等。