ClassLoader源碼學(xué)習(xí)-- 學(xué)習(xí)源碼的方法 (前言并廢話一翻)

ClassLoader的源碼學(xué)習(xí)路徑:
ClassLoader源碼學(xué)習(xí)-- 學(xué)習(xí)源碼的方法
ClassLoader源碼學(xué)習(xí) -- JVM啟動之 Launcher,ClassLoader構(gòu)建
ClassLoader源碼學(xué)習(xí)-- ClassLoader的創(chuàng)建 -- Android Pie
ClassLoader源碼學(xué)習(xí) -- PathClassLoader姆吭,DexClassLoader

學(xué)習(xí)源碼是一個提升自己的很好的過程已艰,知其一不知其二痊末,會用但不懂原理,是技術(shù)人最忌諱的壞習(xí)慣哩掺。

那么問題來了凿叠,要怎么進(jìn)行源碼學(xué)習(xí)?茫茫多的源碼,量子波動閱速讀盒件?


顯然我們還沒有出現(xiàn)10-16周歲的朋友蹬碧,這個方法不適用。

作為逃課(走捷徑)高手炒刁,我們大部分朋友都沒有吃生牛排的能力恩沽,個人總結(jié)學(xué)習(xí)源碼的方法:
1、需要有一個翔始,明確罗心,明確,明確的目標(biāo)城瞎。
2渤闷、在有了目標(biāo)以后,要用電影思維脖镀,搞清楚為什么會存在這個技術(shù)飒箭。
3、要選擇合適的方法蜒灰,建立完善的步驟弦蹂,去離達(dá)成目標(biāo)。

道理大家都懂卷员,只是很多人打開源碼盈匾,就被淹沒了,看10分鐘還是覺得朋友圈和游戲好玩....

舉個栗子毕骡,最近我對Android的插件化有點興趣削饵,so
1、目標(biāo):手?jǐn)]一個未巫,插件化框架窿撬,并實現(xiàn)demo丟到github
2、了解插件化的故事:(原諒我隨手貼別人的文章)
https://blog.csdn.net/caibaozixiaobai/article/details/80801804

以及插件化的技術(shù)原理:

這玩意好處多多(減少apk體積叙凡,大項目間比組件化要更靈活)劈伴,本質(zhì)上是利用DexClassLoader加載一個未安裝的apk文件(dex文件),獲取別人的Class握爷。
Class都獲取了跛璧,在為所欲為之前,Android 5.0以上要求哪怕是用反射打開別人的Activity新啼,也得在Manifest注冊 追城??(別人的東西燥撞,事先還真注冊不上去)

于是得hook了AMS并寫個ProxyActivity和ProxyApplication座柱, 模仿生命周期去加載別人的Activity和Application迷帜,以及資源文件。

難點在于:
1.得了解類加載機(jī)制色洞,Android還有Java 的編譯過程戏锹,還有ClassLoader先關(guān)知識。
2.由于的Hook AMS火诸, AMS的源碼也得看(創(chuàng)建Application和Activity锦针,怎么加載資源文件)

AS能看到源碼當(dāng)然很好,直觀又快捷惭蹂。但往往都是這個場景


image.png

哪怕SDK那把sources for android xx下載了伞插,也是這個命運(yùn)

具體步驟:
1.學(xué)習(xí)源碼,得知道獲取源碼的方式:
jdk源碼:這個在JAVA_HOME目錄下盾碗,有個src.zip ,直接解壓慢慢看
android源碼:https://www.androidos.net.cn/sourcecode

這個網(wǎng)站挺好舀瓢,能把源碼下載廷雅,還方便對比各個版本的差異。

image.png

2.有了源碼以后京髓,要把調(diào)用鏈出現(xiàn)的關(guān)鍵字航缀,一個一個mark下來。

如:JVM的類加載: Launcher -> 各個ClassLoader -> 找到loadClass核心方法堰怨,按照這個方法在一步一步展開學(xué)習(xí)芥玉。關(guān)鍵是,每一步都要mark下來备图,不然就無法自拔了灿巧。

3.學(xué)習(xí)的時候,要注意環(huán)境揽涮。比如現(xiàn)在jdk通用是1.8抠藕, android的Api是26,源碼就選定這兩個蒋困。

4.掌握了classLoader和AMS盾似,可以分部逐步實現(xiàn)。如第一步用classLoader雪标,找到第二個apk的類零院。第二步當(dāng)然是hook ams + ProxyActivity,打開別人的Activity村刨,最后慢慢修補(bǔ)細(xì)節(jié)告抄。

廢話這么多,最后強(qiáng)調(diào)重點:注重方法 + 量化步驟烹困。不要看著源碼變書呆子玄妈,找到自己的方法和節(jié)奏是關(guān)鍵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拟蜻,隨后出現(xiàn)的幾起案子绎签,更是在濱河造成了極大的恐慌,老刑警劉巖酝锅,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诡必,死亡現(xiàn)場離奇詭異,居然都是意外死亡搔扁,警方通過查閱死者的電腦和手機(jī)爸舒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稿蹲,“玉大人扭勉,你說我怎么就攤上這事】疗福” “怎么了涂炎?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長设哗。 經(jīng)常有香客問我唱捣,道長,這世上最難降的妖魔是什么网梢? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任震缭,我火速辦了婚禮,結(jié)果婚禮上战虏,老公的妹妹穿的比我還像新娘拣宰。我一直安慰自己,他們只是感情好活烙,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布徐裸。 她就那樣靜靜地躺著,像睡著了一般啸盏。 火紅的嫁衣襯著肌膚如雪重贺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天回懦,我揣著相機(jī)與錄音气笙,去河邊找鬼。 笑死怯晕,一個胖子當(dāng)著我的面吹牛潜圃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舟茶,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼谭期,長吁一口氣:“原來是場噩夢啊……” “哼堵第!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起隧出,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤踏志,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后胀瞪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體针余,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年凄诞,在試婚紗的時候發(fā)現(xiàn)自己被綠了圆雁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡帆谍,死狀恐怖伪朽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情既忆,我是刑警寧澤驱负,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站患雇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宇挫。R本人自食惡果不足惜苛吱,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望器瘪。 院中可真熱鬧翠储,春花似錦、人聲如沸橡疼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欣除。三九已至住拭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間历帚,已是汗流浹背滔岳。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留挽牢,地道東北人谱煤。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像禽拔,于是被迫代替她去往敵國和親刘离。 傳聞我的和親對象是個殘疾皇子室叉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349