リモートインターフェイスを使用してサービスを記述し、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つのステップでできることは次のとおりです。
最初:サービスの最初の興味深い方法(作成時に使用):
/* (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
}
Second:waitForDebugger
コマンドの後の任意の場所にブレークポイントを設定します。
サード:IDE(Eclipse/Android Studio/...)のデバッグボタンを介してアプリを起動します。今では)
最後:adbを起動し、コマンドを実行してサービスを開始します。
cd $PLATFORM_TOOLS
adb Shell
am startservice -n com.google.Android.apps.gtalkservice/com.google.Android.gtalkservice.service.GTalkService
コード内のこのコード行を忘れないようにして、apkをリリースしてください。 デバッガなしでアプリを実行しようとすると、以下の行がスタックします。
Android.os.Debug.waitForDebugger();
また、次を使用して、デバッガが接続されているかどうかを判断できます。
Android.os.Debug.isDebuggerConnected(); //Determine if a debugger is currently attached.
Android.os.Debug.waitForDebugger()を使用してプログラムで実行する必要があると思います。
これはAndroid Studioで動作します。Eclipseでも同様の方法があると思います。