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

Android 4.x 多 Dex 啟用 multiDexEnabled 導致 NoClassDefFoundError 解決方案

     編輯:程式設計綜合問答

錯誤現象

專案啟用 multiDexEnabled true 後,Android 5.0 以上裝置正常,但 4.x 裝置啟動崩潰:

java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout

根本原因

Android 5.0 (API 21) 內建支援多 Dex(ART 執行環境可自動合併多個 classes.dex)。5.0 以下(Dalvik)僅載入主 Dex,若啟動所需類(如 Application、核心元件)被編入副 Dex,則找不到類別。

完整解決步驟

  1. build.gradle 啟用並加入依賴:
android {
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 21
        multiDexEnabled true
    }
}
dependencies {
    implementation 'com.android.support:multidex:1.0.3'
}
  1. Application 類 繼承 MultiDexApplication 或覆寫 attachBaseContext:
public class MyApp extends MultiDexApplication { ... }

或

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}
  1. Manifest 指定 Application:
<application android:name=".MyApp" ... > ... </application>

驗證建議

  • 使用 adb shell pm list packages -f 確認安裝的 APK 包含多個 dex。
  • 在 4.x 模擬器/真機測試冷啟動、熱啟動、類加載路徑。

參考來源

Google 官方文件:Configure apps with over 64K methods

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