分享

apktool + eclipse 动态调试APK

 herowuking 2015-01-02

用了会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。这样就可以用来调试了。当然,别忘了回编后还需要签名等,于是自己写了个简易的脚本:

  1. ''''' 
  2. Created on 2014-5-28 
  3.  
  4. @author: Xbalien 
  5. '''  
  6. import os  
  7. import sys  
  8. import subprocess  
  9.   
  10. class APKdebugger(object):  
  11.     def unpackaging(self, apk_path):  
  12.         print 'Start Unpackaging...'  
  13.         subprocess.call(['apktool_2.0.0b9.jar','d','-d',apk_path],shell=True)  
  14.   
  15.     def packaging(self, file_path):  
  16.         print 'Start Packaging...'  
  17.         subprocess.call(['apktool_2.0.0b9.jar','b','-d',file_path],shell=True)  
  18.   
  19.     def signer(self, unsigned_path):  
  20.         print 'Start Signing...'  
  21.         signer_comm=['jarsigner','-verbose','-keystore','key','-digestalg','SHA1','-sigalg', 'MD5withRSA' ,'-signedjar','signed.apk']  
  22.         signer_comm += [unsigned_path,'key']  
  23.         p = subprocess.Popen(signer_comm,stdin=subprocess.PIPE,stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True)  
  24.         p.communicate(input='key123456')  
  25.         p.wait()  
  26.   
  27.     def zipalign(self, outapk_path):  
  28.         subprocess.call(['zipalign','-v','4','signed.apk',outapk_path],shell=True)  
  29.   
  30.   
  31. if __name__ == '__main__':  
  32.     if len(sys.argv) >1:  
  33.         print 'Start Create APKdebugger...'  
  34.         apk_path = sys.argv[1]  
  35.         file_path = apk_path[:-4]  
  36.         unsigned_path = './'+file_path+'/dist/'+apk_path  
  37.         outapk_path = file_path+'//'+apk_path  
  38.         apk_debugger = APKdebugger()  
  39.         apk_debugger.unpackaging(apk_path)  
  40.         apk_debugger.packaging(file_path)     
  41.         apk_debugger.signer(unsigned_path)  
  42.         apk_debugger.zipalign(outapk_path)  
  43.     else: print 'useage:main.py apk_name'  

脚本处理好之后,apk也就生成了。之后将其安装到手机上。点击运行。这时候可以通过DDMS查看



这时候打开Eclipse,新建java工程,加入源代码(反编译代码smali目录)



之后我们可以打开个文件下断点


接着设置调试配置文件,选定远程调试以及对应端口即可开始调试


之后点击debug。这时候可以在手机上开始了点击。到相应断点的时候就断下来了


之后就可以愉悦的单步调试了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多