59

リモート インターフェイスを備えたサービスを作成し、PC の Eclipse AVD にインストールしました。サービスのメソッドを開始して呼び出すクライアント テスト ハーネスがあります。最初に、サービスのマニフェストが次のようになるように、コントロール クラスとアクティビティによってサービスをインストールしましたが、これを削除しました。

<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myname.gridservice"
android:versionCode="1"
android:versionName="1.0">
<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:debuggable="true">
    <service
        android:enabled="true"
        android:debuggable="true"
        android:name="OverlayService">
        <intent-filter>
            <action android:name="com.myname.OverlayService.SERVICE"/>
            <action android:name="com.myname.gridservice.IRemoteInterface" />
        </intent-filter>
    </service>
 </application>  
</manifest>   

したがって、アクティビティ タグはありません。

Eclipse のデバッグ アイコンから起動すると、コンソールに apk がインストールされていることが示されますが (これはそうです)、サービスの動作は問題ありませんが、デバッグ スレッドとして表示されず、ブレークポイントもトリガーされません。クライアントが見ているように。関連付けられたクラスを持つアクティビティ タグでサービス タグをラップして起動すると、デバッグできます。

アクティビティにラップせずにサービスをデバッグすることはできますか?

4

6 に答える 6

92

4つのステップでできることは次のとおりです。

最初:あなたのサービスの最初の興味深い方法で(私は作成に使用しました):

/* (non-Javadoc)    
 * @see android.app.Service#onCreate()
 */
@Override
public void onCreate() {
    super.onCreate();
    //whatever else you have to to here...
    android.os.Debug.waitForDebugger();  // this line is key
}

2番目:コマンドの後の任意の場所にブレークポイントを設定しwaitForDebuggerます。

3番目:IDE(Eclipse / Android Studio / ...)のデバッグボタンからアプリを起動します。(おそらく、マニフェストからメインの起動アクティビティを削除しているはずです)

最後:adbを起動し、コマンドを実行してサービスを開始します。

  • cd $PLATFORM_TOOLS
  • adb shell
  • am startservice -n com.google.android.apps.gtalkservice/com.google.android.gtalkservice.service.GTalkService
于 2011-06-29T19:19:08.800 に答える
23

コード内のこのコード行を忘れないようにして、apk をリリースしてください。デバッガーなしでアプリを実行しようとすると、以下の行が動かなくなります。

android.os.Debug.waitForDebugger();

また、以下を使用して、デバッガーが接続されているかどうかを判断できます。

android.os.Debug.isDebuggerConnected(); //Determine if a debugger is currently attached.
于 2013-06-10T17:01:05.967 に答える
5

android.os.Debug.waitForDebugger();を使用してプログラムで実行する必要があると思います。

于 2011-06-13T12:51:59.223 に答える
2

これは Android Studio で機能します。私が推測するEclipseにも同様の方法があるかもしれません。

  1. プロジェクトをデバッグモードで実行する
  2. デバッガーをサービス プロセスにアタッチする
于 2015-07-21T10:32:52.880 に答える