專案啟用 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,則找不到類別。
android {
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
multiDexEnabled true
}
}
dependencies {
implementation 'com.android.support:multidex:1.0.3'
}
MultiDexApplication 或覆寫 attachBaseContext:public class MyApp extends MultiDexApplication { ... }
或
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
<application android:name=".MyApp" ... > ... </application>
adb shell pm list packages -f 確認安裝的 APK 包含多個 dex。Google 官方文件:Configure apps with over 64K methods