標籤:動態調試 apktool eclipse
用了會AndBug,雖然挺強大的但是作為習慣了OD,EDB作為動態調試工具的人,自然有些不習慣,於是乎尋求新的動態調試解決方案。但大多數都是NetBeans + apktool,想著還得多下一個IDE就各種煩躁,還是去尋求Eclipse的組合吧。
http://code.google.com/p/android-apktool/wiki/SmaliDebugging
找到apktool的官網,看到有可以實現動態調試。可以在反編譯和回編的時候通過設定參數給目標APK中的manifest檔案中加入android:debuggable="true",,同時為了結合Eclipse,之後也會自動把.smali尾碼改為了.java。這樣就可以用來調試了。當然,別忘了回編後還需要簽名等,於是自己寫了個簡易的指令碼:
'''Created on 2014-5-28@author: Xbalien'''import osimport sysimport subprocessclass APKdebugger(object): def unpackaging(self, apk_path): print 'Start Unpackaging...' subprocess.call(['apktool_2.0.0b9.jar','d','-d',apk_path],shell=True) def packaging(self, file_path): print 'Start Packaging...' subprocess.call(['apktool_2.0.0b9.jar','b','-d',file_path],shell=True) def signer(self, unsigned_path): print 'Start Signing...' signer_comm=['jarsigner','-verbose','-keystore','key','-digestalg','SHA1','-sigalg', 'MD5withRSA' ,'-signedjar','signed.apk'] signer_comm += [unsigned_path,'key'] p = subprocess.Popen(signer_comm,stdin=subprocess.PIPE,stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True) p.communicate(input='key123456') p.wait() def zipalign(self, outapk_path): subprocess.call(['zipalign','-v','4','signed.apk',outapk_path],shell=True)if __name__ == '__main__': if len(sys.argv) >1: print 'Start Create APKdebugger...' apk_path = sys.argv[1] file_path = apk_path[:-4] unsigned_path = './'+file_path+'/dist/'+apk_path outapk_path = file_path+'//'+apk_path apk_debugger = APKdebugger() apk_debugger.unpackaging(apk_path) apk_debugger.packaging(file_path) apk_debugger.signer(unsigned_path) apk_debugger.zipalign(outapk_path) else: print 'useage:main.py apk_name'
指令碼處理好之後,apk也就產生了。之後將其安裝到手機上。點擊運行。這時候可以通過DDMS查看
這時候開啟Eclipse,建立java工程,加入原始碼(反編譯代碼smali目錄)
之後我們可以開啟個檔案下斷點
接著設定調試設定檔,選定遠端偵錯以及對應連接埠即可開始調試
之後點擊debug。這時候可以在手機上開始了點擊。到相應斷點的時候就斷下來了
之後就可以愉悅的單步調試了