問(wèn):為什么源碼中很多方法就一行throw new RuntimeException("Stub!")?
- 使用的Android Studio或者其他IDE看jar包的源碼的時(shí)候,編譯工具只讓你看到方法簽名,不讓你看方法的實(shí)現(xiàn);
- Android SDK自帶的Source源碼包很小,并沒(méi)有包括所有的Android Framework的源碼,僅僅提供給應(yīng)用開(kāi)發(fā)參考用,一些比較少用的系統(tǒng)類(lèi)的源碼并沒(méi)有給出,所以有時(shí)候你會(huì)看到throw new RuntimeException("Stub!")。
- 此外,在IDE里看源碼的時(shí)候,有時(shí)候一些方法或者類(lèi)會(huì)出現(xiàn)報(bào)紅(找不到)的情況:這是因?yàn)檫@些方法或者類(lèi)是被Android SDK隱藏的,出于安全或者某些原因,這些API不能暴露給應(yīng)用層的開(kāi)發(fā)者,所以編譯完成的android.jar包里會(huì)把這些API隱藏掉,而我們的Android項(xiàng)目是依賴(lài)android.jar的,查看源碼的時(shí)候,IDE會(huì)自動(dòng)去android.jar找對(duì)應(yīng)的API,自然會(huì)找不到。當(dāng)然,這些API在ROM中是實(shí)際存在的,有些開(kāi)發(fā)者發(fā)現(xiàn)了一些可以修改系統(tǒng)行為的隱藏API,在應(yīng)用層通過(guò)反射的方式強(qiáng)行調(diào)用這些API執(zhí)行系統(tǒng)功能,這種手段也是一種HACK。