Fragment != Fragment —— Xposed開發時遇到的關於ClassLoader的問題

今天在寫Xposed模塊的過程中,爲了找到某個Field,需要判斷Filed的某個祖先的類型是是Fragment類型

但在做比較的時候出現了問題,發生了Fragment != Fragment的問題:

注:這裏的 Fragment 是 android.support.v4.app.Fragment 而不是 android.app.Fragment

我們知道v4包是要額外導入的,
v4支持庫

所以說,一共出現了兩份v4包,一份打包在宿主app裏,一份打包在自己的模塊裏面,在加載的時候會出現因爲ClassLoader不一致而導致兩個class不同的情況

如圖:

debug截圖

在debug添加查看發現,兩個Class雖然都是android.support.v4.app.Fragment但由於ClassLoader不一樣,導致兩個Class不相等;

查看其它的Class發現,系統自帶的那些jar裏面的Class都是由BootClassLoader加載的,
BootClassLoader
而BootClassLoader的實例在虛擬機中只有一個,所以模塊中的Context.class和宿主app裏的Context.class是一樣的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章