web-dev-qa-db-ja.com

Androidアプリケーションは 'adb Shell am start -D'から開始されましたか?

すでに電話にインストールされているAndroidアプリケーションをデバッグする必要があります。デバッグモードでアプリケーションを起動できますが、プロセスに接続できません JDWPを使用しています。両方とも失敗する2つの異なる方法を試しました(次のセクションを参照)


コマンドラインの試行

1-アプリケーションを起動します

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

アプリケーションが起動し、「/!\ Waiting for debugger」という警告が表示されます。

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: ********
13
h3xStream

デプロイされたアプリケーションは debuggable 属性がfalseに設定されて構成されました。携帯電話で与えられたプロンプトは単に誤解を招くものでした。

1
h3xStream
  1. 電話を根絶する
  2. ルートシェルを開く

    (computer)$ adb Shell 
    (phone)$ su
    (phone)#
    
  3. amコマンドを実行する

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

これにより、Android:debuggableが設定されているかどうかに関係なく、どのアプリでもデバッグできます。

17
Vitaly Osipov