起因

Android Studio是开发Android应用的一大利器,极大的提高了生产力(虽然比较臃肿),debug功能也非常好用,而且不止能debug Java代码,smali代码也能调试,配合apktool使用真的是爽的很(除了indexing花了老半天这个问题以外)。

但是!这个利器在调试smali工程的时候,就表现得十分不友好啦,以前有DDMS的时候还好一些,能看到调试端口号,但是经常遇到DDMS和AndroidStudio的adb端口冲突的问题,水火不容,无奈之下只能adb shell am start -D -n xxx.xxxx.xxxx/.xxxx手动以debug模式启动应用,配合adb forward tcp:xxxx jdwp:xxxx,但是不知道咋回事经常遇到

Unable to open debugger port (localhost:8603): java.io.IOException "handshake failed - connection prematurally closed"

每次遇到这种错误,我心中是一万只草泥马飞奔而过啊!这tm还让不让人debug啦!

WTF!

冷静分析

想起了Android Studio打开纯Android项目的时候,在顶部工具栏会有一个调试用的按钮Attach debugger to Android process,就是那个图标是竖着的长方形,右下角一只小虫子的按钮,点一下可以选择要attch的进程 Attach debugger to Android process

这个功能在开发的时候用起来很爽,但是当我们打开的不是Android项目时: WTF!

这个按钮没了 假的Android Studio吧

别着急

这应该是Android Studio 设计的问题,它被设计成了只要不是Android项目就不显示那些按钮,但是它忽略了调试smali的情况

冷静,何必和一个小按钮过意不去呢,让我们来想想对策。

Run -> 没有 Help -> Find Action -> 搜不到

就在这山穷水复无路之际,突然想出个点子:

快捷键! 快捷键! 快捷键!

解决办法是快捷键

Setting -> 搜索 -> Attach debugger to Android process -> keymap

真·Attach debugger to Android process

不出所料真的搜到了,这里的快捷键是我添加的,原先没有快捷键,我设置的是Ctrl + Alt + R R就是reverse嘛,+D的都被占了没办法。

确认,出来试试。

果然功夫不负有心人!

真·Choose Process

测试发现完全ok!

DDMS,再见

去你丫的DDMS,再见(丢)! 丢了

不行。。。

捡起 Android Studio 里还没有 Method Profiling 呢