Bad artists copy;Good artists steal.【平庸的藝術(shù)家抄;杰出的藝術(shù)家偷】——畢加索。
To copy others is necessary, but to copy oneself is pathetic.【模仿別人是必要的,但重復(fù)自己是可悲的】——畢加索。
藝術(shù)家如此,在程序猿前進的道路上,又何嘗不是如此呢?模仿寫代碼必然是頭等大事,因為俗話說天下代碼一大抄。但是有些場景下你拿到都是 JAR 包,而并非源碼,咋辦?
另外,在項目對接過程中,你有沒有經(jīng)歷過外部門或者其它公司給你一個對接的 SDK,但是有沒有一絲好奇就想知道 SDK 里面寫的啥?到底該怎么窺探?
好了,任何困難都阻擋不了程序猿前進的腳步,任何問題都撲滅不了程序猿好奇的火苗。接下來就就一起聊聊 Java 反編譯相關(guān)的知識。
大家都知道,將源文件轉(zhuǎn)換成二進制執(zhí)行代碼的過程叫“編譯”,比如將 Java 源代碼編譯成 JAR 可執(zhí)行文件;那么把二進制執(zhí)行文件轉(zhuǎn)換成源文件的過程就叫“反編譯”,比如將 JAR 反編譯成源文件。
那么 Java 平臺下有沒有開源的輪子,可以讓反編譯這件事情變得簡單呢?
那是當(dāng)然,這樣的輪子一籮筐。Java 平臺下有Jad、Jode、Java Decompiler(JD-GUI)等反編譯利器,編程這些年,幾乎都用過,但是目前電腦上只有 Java Decompiler(JD-GUI)這一款在用,之前分享的很多關(guān)于源碼的文章,這個工具立下了汗馬功勞。
1. 工欲善其事必先利其器Java Decompiler (JD-GUI)目前最新版本為1.6.3,并且提供 Windows、Linux 和蘋果 Mac Os 三個平臺的可執(zhí)行版本。
http://java-decompiler.github.io/#jd-gui-download
只需選擇適合你的那一款。
2. 工具而已,用就行啦完成下載,安裝完畢后,一杯熱騰騰的咖啡呈現(xiàn)在你面前,讓你垂涎欲滴、躍躍欲試。
還記得《愛情36技之暗送秋波的技術(shù)》文章中為 Python 菇?jīng)龃蛟斓囊豢顚崟r監(jiān)控的隨身聽設(shè)備 walkman.jar 嗎?我們不妨用 JD-GUI 打開看看里面寫的都是啥?
嗯,感覺反編譯還可以,貌似效果也是那么回事兒!
3. 簡單的工具,不多說JD-GUI 支持泛型、enum 枚舉類型和Annotation 的反編譯;支持整個 JAR 文件的反編譯,并且在反編譯后的源代碼可直接點擊進行相關(guān)代碼的跳轉(zhuǎn),說一千道一萬,不妨自己試試看。
2 分鐘系列平淡的分享到這就結(jié)束了, 主要解決網(wǎng)友提出的一個問題,希望對你也有點幫助吧。