1. 程式人生 > >Android熱補丁動態修復技術(二):實戰!CLASS_ISPREVERIFIED問題!(熱修復技術)

Android熱補丁動態修復技術(二):實戰!CLASS_ISPREVERIFIED問題!(熱修復技術)

在apk安裝的時候,虛擬機器會將dex優化成odex後才拿去執行。在這個過程中會對所有class一個校驗。 校驗方式:假設A該類在它的static方法,private方法,建構函式,override方法中直接引用到B類。如果A類和B類在同一個dex中,那麼A類就會被打上CLASS_ISPREVERIFIED標記 被打上這個標記的類不能引用其他dex中的類,否則就會報圖中的錯誤 在我們的Demo中,MainActivity和Cat本身是在同一個dex中的,所以MainActivity被打上了CLASS_ISPREVERIFIED。而我們修復bug的時候卻引用了另外一個dex的Cat.class,所以這裡就報錯了 而普通分包方案則不會出現這個錯誤,因為引用和被引用的兩個類一開始就不在同一個dex中,所以校驗的時候並不會被打上CLASS_ISPREVERIFIED 補充一下第二條:
A類如果還引用了一個C類,而C類在其他dex中,那麼A類並不會被打上標記。換句話說,只要在static方法,構造方法,private方法,override方法中直接引用了其他dex中的類,那麼這個類就不會被打上CLASS_ISPREVERIFIED標記。(可通過位元組碼技術保證每個類引用其他DEX的類)