Как отладить приложение для Android, запущенное из 'adb shell am start -D '?

Мне нужно отладить приложение для 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.

IntelliJ попытка

Я настроил свой локальный проект для запуска действия по умолчанию и снимите флажок "Развернуть приложение".

Я также запускаю приложение с тем же предупреждением, но, к сожалению, IDE не подключается к удаленному процессу.

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

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

2 ответа

Решение

Развернутое приложение было настроено с debuggable для атрибута установлено значение false. Подсказка на мобильном телефоне вводила в заблуждение.

  1. Рут телефон
  2. Откройте корневую оболочку

    (computer)$ adb shell 
    (phone)$ su
    (phone)#
    
  3. Бежать am команда

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

Таким образом, вы можете отлаживать любое приложение, независимо от того, имеет ли оно android:debuggable установить или нет.

Другие вопросы по тегам