首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 重啟模擬器後構建失敗:Jackson 庫重複類導致 Dex 錯誤 (Conversion to Dalvik format failed with error 1)

     編輯:程式設計綜合問答

現象:代碼未修改,僅重啟模擬器/清理構建後,報錯:UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.IllegalArgumentException: already added: Lorg/codehaus/jackson/Base64Variant;。

根因:依賴傳遞導致 Jackson 多版本/多副本進入 Dex

  • 項目直接依賴 jackson-core。
  • 第三方庫(如 some-lib)也傳遞依賴 jackson-core(可能版本不同)。
  • Dex 合併時發現同包同類(org.codehaus.jackson.Base64Variant),拋出 already added。

排查命令

# Linux/Mac:查找所有包含 jackson 的 jar
find . -name "*.jar" -exec sh -c 'jar tf {} | grep -q jackson && echo {}' \;

# 或針對具體庫
jar tvf libs/some-lib.jar | grep jackson

解決方案

  1. 統一版本:在 build.gradle 強制指定版本:
    configurations.all {
        resolutionStrategy {
            force 'com.fasterxml.jackson.core:jackson-core:2.15.2'
            force 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
        }
    }
  2. 排除傳遞依賴:
    implementation ('com.thirdparty:some-lib:1.0') {
        exclude group: 'com.fasterxml.jackson.core', module: 'jackson-core'
    }
  3. JarJar 重定向包名(極端情況):將第三方庫的 Jackson 重打包到 com.myapp.shaded.jackson。

預防措施

  • 定期執行 ./gradlew dependencies 檢查依賴樹衝突。
  • 優先使用 implementation 而非 api 隔離傳遞依賴。
  • 升級至 Android Gradle Plugin 3.2+,內建重複類檢測更友好。

依賴衝突是構建失敗高發區,善用解析策略與排除規則,保持 Dex 純淨。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved