2013-04-13 51 views
1

不幸的是我刪除了我的Android源代碼。嘗試使用dex2jar和baksmali來獲取jar,並使用jd-gui來使用我的.apk文件獲取java源文件。是的,我得到的文件,但我的問題是,在更多的地方在java文件中,代碼是字節格式。需要將其轉換爲可讀格式才能讓自己前進。如何從.apk文件中提取java文件

回答

2

反編譯不是一門完美的科學,你很少會找回你輸入的確切的Java代碼。

當你編譯你的代碼時,會對它進行一系列的優化,如果你打算獲取原始代碼,這會使反編譯變得更加困難。

充其量,你會得到很多體面反編譯的代碼,以及一些字節碼。您應該能夠根據程序中的位置找出替代該字節代碼的Java代碼,並在您編寫原始代碼時進行查看。

對於大多數簡單的應用程序,從頭開始重寫比反編譯更容易,並嘗試修復反編譯的代碼。

tl; dr:別忘了備份你的代碼。永遠。

+0

但我最重要的操作和業務邏輯是字節格式。你的意思是沒有辦法讓它回來?我應該從頭開始嗎? – Joseph

+2

@Joseph在線有可用的字節表,如果你真的花時間在上面,你可能會手動將字節碼轉換爲相應的Java,但這需要很長時間。我建議你從頭開始。 –

+0

很多優化? 'Javac'並沒有真正做優化。雖然Android工具鏈可能會。 – Antimony

0

一般而言,如果您的目標是獲得可讀的來源,那麼像JD-Gui這樣的東西是您最好的選擇。但是對於失敗的情況,你可以試試我編寫的反編譯器Krakatau

Krakatau旨在能夠反編譯類文件,即使它們被混淆或不從Java編譯。然而,結果不像JD-Gui那樣可讀,因爲它沒有利用Java編譯器留下的模式。這並不完美,但我認爲這絕對值得一試。

P.S. Krakatau僅支持JVM字節碼。您需要一種方法將其從Android轉換回Java字節碼,然後才能對其進行反編譯。