关于真机调试smali中一些注意点
因为动态调试smail代码但是就是连接不上真机了试了很多方法都还是连接不上,导致后续调试继续无法,查百度,度发现没有啥用,花费了些时间终于连接上真机调试。因为我是新手对于新手来说第一次接触调试如何连接上真机感觉很痛苦,这里把一些遇见的问题会详细说明,希望没给新手朋友一些帮助。在感谢@@会飞的丑小鸭 大佬的教程,这个是在原基础上对于一些遇见的问题的解决。这里附上原帖子地址 https://www.52pojie.cn/thread-658865-1-1.html 图片和原贴基本一致,如果有违规请提醒我下感谢 关键地方都有说明 这里话不多说,直接开始。第一步:
打开手机usb调试功能
然后把要调试的apk拖去Android killer 点击工程管理记住包名hfdcxy.com.myapplication 和入口的Activity名 hfdcxy.com.myapplication.MainActivity
这里要注意一下 在application标签里面要有 android:debuggable="true" 这句代码,没有是不能调试apk。没有的apk中没有这句代码要自行添加上
在E盘新建一个任意名字文件夹 然后把打开文件路径目录里的smali文件夹复制到该文件夹内并改名为src
要用AndroidStudio动态调试smali代码 首先要安装ideasmali插件
1打开AndroidStudio
安装ideasmali插件,File->Settings->Plugins,下载安装ideasmali插件。
第三部
打开Android studio 点击tools再点击Android 查看Android Device Monitor
第四步
打开命令行 输入命令 adb shell am start -D -n hfdcxy.com.myapplication/hfdcxy.com.myapplication.MainActivity
重点表情 输入该命令后,手机会弹出 wait for debugger 切记不要点击! 不要点击force
closed然后查看Android Device Monitor 记住下图圈起来的两个值 然后把Android Device Monitor关掉(这里一定要关掉,因为它会占用8700端口 导致后面转发端口失败)
重点又来了, 这个时候请完全关闭AS 打开命令行输入命令
netstat -aon|findstr 8700这个是查看8700端口是否被占用,因为有时候关闭了AS但是
8700端口还是占用的,然后命令行会显示占用进程的pid 接下来输入
taskkill /PID 9060 /F杀掉占用进程
然后输入命令 adb forward tcp:8700 jdwp:19509 转发8700 端口 (这里 jdwp是自己Android Device Monitor中要调试app的Online值 )
然后再打开AS切记全程不要关闭force closed
第五步:
用AS打开刚刚新建的那个文件夹
图片描述
图片描述
一直next 最后finish
第六步
点击Android选择Project 对之前反编译的 jwx02/src文件夹右键-->Make Directory As --->Source Root
图片描述
图片描述
十一 配置远程调试的选项,选择Run-->Edit Configurations 并增加一个Remote调试的调试选项,端口选择:8700
选择File-->Project Structure 配置JDK
在Smali中下好断点 断点的意思是程序运行到下断点的那行代码就会断下来
十四 下好断点之后Run-->Debug'smali',这里的smali是我们之前配置好的调试选项
大部分和原贴相同,主要是waitfor debugger 和转发端口哪里比较重要和原贴有些不同,原贴哪里说的不是很清楚,按照那个方法会出现一些错误连不上,按照我上面写的这个方法就可以连接上 我从来没有用这种方法成功调试过service还有子线程的程序,很多时候我只能用IDA加载dex来动态调试,所以怎么去调试service呢,下了断点都捕获不到 看看,先表示下感谢~ 学习了谢谢分享。 支持一下 这个不错,要支持... 感谢大神分享~~~ 最近也在研究as
感谢分享经验,谢谢楼主 学习了谢谢分享。