web-dev-qa-db-ja.com

サービスのデバッグ

リモートインターフェイスを使用してサービスを記述し、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のインストールが通知されますが、デバッグスレッドとして表示されず、ブレークポイントはトリガーされませんが、サービスの動作は可能な限り問題ありませんクライアントはそれを見ます。関連するクラスを持つアクティビティタグでサービスタグをラップして起動すると、デバッグできます。

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

54
NickT

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
}

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

サード:IDE(Eclipse/Android Studio/...)のデバッグボタンを介してアプリを起動します。今では)

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

  • cd $PLATFORM_TOOLS
  • adb Shell
  • am startservice -n com.google.Android.apps.gtalkservice/com.google.Android.gtalkservice.service.GTalkService
79
Brian Sweeney

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

Android.os.Debug.waitForDebugger();

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

Android.os.Debug.isDebuggerConnected(); //Determine if a debugger is currently attached.
22
Gilson

enter image description here

2018ボタンの編集アイコンが変更されました

enter image description here

enter image description here

これは非常に簡単で、アプリケーションサービスに接続できます。デバッガーの実行が機能しないと仮定すると、上図の矢印アイコンでデバッグを押すことでプロセス選択オプションを押すことができます。サービスを選択すると、サービスをデバッグできるようになります。

20
StarWind0

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

5
vipw

これはAndroid Studioで動作します。Eclipseでも同様の方法があると思います。

  1. デバッグモードでプロジェクトを実行する
  2. デバッガをサービスプロセスにアタッチします
2
Ornithopter