/ /サービスのデバッグ - android、android-manifest

サービスのデバッグ - アンドロイド、アンドロイドマニフェスト

リモートインタフェースでサービスを書きましたそして、それを私の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をインストールするように指示されますが、デバッグスレッドとしては表示されず、ブレークポイントはトリガされません。ただし、クライアントから見ればサービスの動作は問題ありません。関連するクラスを持つアクティビティタグでサービスタグをラップして起動すると、それをデバッグできます。

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

回答:

回答№1の場合は75

これが4つのステップでできることです。

最初:あなたのサービスの最初の面白い方法(私はcreateで使った):

/* (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番目:waitForDebuggerCommandの後にブレークポイントを設定します。

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

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

  • cd $PLATFORM_TOOLS
  • adb shell
  • am startservice -n com.google.android.apps.gtalkservice/com.google.android.gtalkservice.service.GTalkService

回答№2の19

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

android.os.Debug.waitForDebugger();

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

android.os.Debug.isDebuggerConnected(); //Determine if a debugger is currently attached.

回答№3の15

ここに画像の説明を入力

だからこれはOrnithopterでカバーされています...しかし彼らの答えはそれをするために "実際には" HOW "と言っているのではありません。

アプリケーションを実行してください。写真のボタンを押して、あなたの背景プロセスを選択してください。同期が同期アダプタ専用であるかどうかわかりません。


答え№4のための5

私はそれがandroid.os.Debug.waitForDebugger()でプログラム的に行われるべきだと思います。


回答№5の2

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

  1. デバッグモードでプロジェクトを実行する
  2. サービスプロセスにデバッガを接続する