App 在 Android 4.3 正常,4.4+ 發現 /data/data/pkg/lib 從目錄變為文件,DexClassLoader 加載失敗。
Android 4.4 引入 ART (Android Runtime) 替代 Dalvik,帶來以下變更:
/data/app/pkg/oat/,原 lib 目錄結構調整。/data/data/pkg/lib 不再是目錄,可能被系統佔用為文件或符號鏈接。optimizedDirectory 必須指向可寫目錄(如 context.getDir("dex", MODE_PRIVATE)),不可指向系統管理的 lib。
File optimizedDir = context.getDir("dex", Context.MODE_PRIVATE);
DexClassLoader loader = new DexClassLoader(
apkPath, optimizedDir.getAbsolutePath(), null, getClassLoader());
| 方面 | 影響 |
|---|---|
| 安裝時間 | 增加(AOT 編譯) |
| 啟動速度 | 顯著提升(無解釋執行) |
| 運行性能 | CPU 密集型提升明顯 |
| 存儲佔用 | 增加(OAT 文件) |
| 動態加載 | 首次加載較慢(驗證/編譯) |