項目地址
類加載方案的原理是在app重新啓動後讓Classloader去加載新的類。因爲在
app運行到一半的時候,所有需要發生變更的類已經被加載過了,在Android上是
無法對一個類進行卸載的。如果不重啓,原來的類還在虛擬機中,就無法加載新類。
因此,只有在下次重啓的時候,在還沒走到業務邏輯之前搶先加載補丁中的新類,這
樣後續訪問這個類時,就會Resolve爲新類。從而達到熱修復的目的。
將修復好的dex文件push到SD卡,模擬從服務器下載
adb push /Users/keecham/Desktop/classes2.dex /sdcard
複製dex到私有目錄
FileUtils.copyFile(sourceFile, targetFile);
加載修復後的dex文件
FixDexUtils.loadFixedDex(this);
apk 安裝時,系統會使用 PathClassLoader 來加載apk文件中的dex,PathClassLoader的構造方法中,調用父類的構造方法,實例化出一個 DexPathList ,DexPathList 通過 makePathElements 在所有傳入的dexPath 路徑中,找到DexFile,存入 Element 數組,在應用啓動後,所有的類都在 Element 數組中尋找,不會再次加載。