14

我需要调试一个已经安装在手机上的 android 应用程序。我能够以调试模式启动应用程序,但无法使用 JDWP 连接到进程。我尝试了两种不同的方法,但都失败了。(见以下部分)


命令行尝试

1-启动应用程序

[...]sdk\platform-tools>adb -d shell am start -D -n "package/package.SomeActivity"

应用程序启动并显示警报“/!\ 等待调试器”。

2-打开一个JDWP端口

[...]sdk\platform-tools>adb forward tcp:8000 jdwp:7602

3-尝试使用jdb连接

[...]sdk\platform-tools>jdb -attach 127.0.0.1:8000
    java.io.IOException: shmemBase_attach failed:
        at com.sun.tools.jdi.SharedMemoryTransportService.attach0(Native Method)
        at com.sun.tools.jdi.SharedMemoryTransportService.attach(SharedMemoryTransportService.java:108)
        at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116)
        at com.sun.tools.jdi.SharedMemoryAttachingConnector.attach(SharedMemoryAttachingConnector.java:63)
        at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519)
        at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328)
        at com.sun.tools.example.debug.tty.Env.init(Env.java:63)
        at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1066)
Fatal error:
Unable to attach to target VM.

智能尝试

我已将本地项目配置为启动默认活动并取消选中“部署应用程序”。

我也让应用程序以相同的警报启动,但不幸的是 IDE 没有连接到远程进程。

Target device: 42f7cc14e2acbfab
Launching application: ********/********.SomeActivity.
DEVICE SHELL COMMAND: am start -D -n "********/********.SomeActivity"
Starting: Intent { cmp=********/********.SomeActivity }

Waiting for process: ********
4

2 回答 2

19
  1. 根电话
  2. 打开根外壳

    (computer)$ adb shell 
    (phone)$ su
    (phone)#
    
  3. 运行am命令

    # am start -D -n "package/package.SomeActivity"
    

通过这种方式,您可以调试任何应用程序,无论它是否已android:debuggable设置。

于 2015-05-07T21:48:57.850 回答
1

已部署的应用程序配置为将debuggable属性设置为 false。手机上的提示简直是误导。

于 2014-01-07T17:54:34.040 回答