在windows上用AndroidStudio开发android时遇到了一个问题:
在XXX-java中报出提示:
Connected to the target VM, address: 'localhost:8601', transport: 'socket'
然后app进入等待状态然后黑屏了,无法进入调试。
解决1:
端口被占用,需要杀死对应进程,但实际上该端口是AndroidStudio在使用。如果同时用Eclipse和AndroidStudio同时进行android开发倒有这个可能,然而我只在使用AndroidStudio,故而此方法不适用。(确保adb是AndroidStudio的adb)
解决2:
in android studio: tools->android->enable adb integration(this should be checked) uncheck this, then check again. this solved me this problem. (it restarts the adb integration)。该方法来自stackoverflow,然而我试了之后还是没有用。
启示:
除了以上两种方法,网上能找到的方法我几乎都试过了一遍,然而并没有什么用。
虽然在尝试的过程中我也有思考,但是一直没法定位问题,尝试网上的方法感觉就是死马当活马医,急病乱投医。“知其然而不知其所以然”是经验主义奉行的,而这种方法不一定适用所有的场景,所以必须探究其所以然。
过程:
1、我首先摆出我的疑惑“这个项目名-java”是个什么东西,能不能禁用掉,然后一直在attach debugger to process中徘徊,但是没有效果。
2、然后我和能够正常调试的android app项目比较,确实这个“项目名-java”是个多出来的东西,但是不知道这是什么啊,想起项目中是有用到ndk的,于是合理猜想这是给ndk用的。
3、猜想后实践,在Project Structure的Build Type的jni debugger中设为true,然后开始调试,然后……没有用。
4、兜兜转转中看到Debug的Edit Configuration中有一个Debugger中有一个Build Type默认为Auto,于是改成Java就可以成功调试了。
5、一开始推理为其原因为,应该是开启了Debugger的Auto模式,那么Android Studio就同时开启了android的java调试以及ndk的native调试,而这两个使用的端口是一样的,于是出现了端口占用,因此每次只能进行Java调试或者ndk调试,不能用Auto模式。
6、但是项目中并没有实际的native的C/C++代码,只有一些.so的库文件。所以并没有定位出具体问题,但是肯定是跟ndk有关的。而自己新建Include C++的Android默认项目是可以正常调试的,但是项目结构上就有所不同了。所以大概是项目代码或者项目设置上哪里有问题吧。以后有时间再研究ndk开发的问题吧。
最终解决办法:Run->Edit Configuration->Debugger->Build Type设置为Java模式,则可以正常调试。