如何调试通过'adb shell am start -D'启动的Android应用程序?

16

我需要调试一个已经安装在手机上的安卓应用程序。我能够以调试模式启动该应用程序,但是使用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.

IntelliJ尝试

我已经配置了我的本地项目,启动默认的Activity并取消“部署应用程序”的选项。

我也成功启动了该应用程序,但是不幸的是IDE没有连接到远程进程。

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

Waiting for process: ********
2个回答

23
  1. 获取手机Root权限
  2. 打开Root Shell

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

  4. # am start -D -n "package/package.SomeActivity"
    
    这样你就可以调试任何应用程序,无论它是否设置了android:debuggable

这样你就可以调试任何应用程序,无论它是否设置了android:debuggable


2
我很快就要尝试这个。这可能非常有用,可以在没有源代码的情况下调试应用程序。 - h3xStream
1
如果我输入 adb jdwp 命令,它没有返回任何内容,因此我无法连接调试器。 - WSS
这些都对我没用。让我们看看谷歌能否帮助我 https://issuetracker.google.com/issues/189615411 - hannes ach

1
部署的应用程序配置中,debuggable 属性设置为 false。在手机上提示的信息并不准确。

1
如果我按照这篇文章中的命令运行应用程序,然后运行adb jdwp,它返回空白。 - WSS
@WSS 很可能您无法访问调试端口。请提出一个新问题。 Android的工具已经发生了很大变化。 - h3xStream

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接