Depuración de un servicio

Escribí un servicio con una interfaz remota y lo instalé en el Eclipse AVD de mi PC. Tengo un arnés de prueba de cliente que inicia e invoca métodos en el servicio. Inicialmente, tuve el servicio instalado por una clase y actividad de control, que ahora he eliminado, para que el manifiesto para el servicio se vea así:

           

entonces no hay etiqueta de actividad

Cuando lo ejecuto desde el ícono de depuración en Eclipse, la consola me dice que está instalando el apk (que es), pero no aparece como un subproceso de depuración y los puntos de interrupción no se activan, aunque el comportamiento del servicio es correcto en cuanto a el cliente lo ve Si envuelvo la etiqueta de servicio en una etiqueta de actividad que tiene una clase asociada y la inicio, entonces puedo depurarla

¿Es posible depurar el servicio sin envolverlo en una actividad?

Esto es lo que puede hacer en cuatro pasos:

Primero: en el primer método interesante de su servicio (lo usé en crear):

 /* (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 } 

Segundo: establecer puntos de ruptura después del waitForDebuggerCommand.

Tercero: Inicie la aplicación a través del botón de depuración en Eclipse. (Probablemente deberías haber eliminado la actividad de inicio principal del manifiesto por ahora)

Último: ejecuta adb y ejecuta el comando para iniciar un servicio:

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

solo asegúrate de no olvidar esta línea de código en tu código y liberar tu apk. si intenta ejecutar su aplicación sin el depurador, la línea siguiente se atascará.

 android.os.Debug.waitForDebugger(); 

también puede usar lo siguiente para determinar si el depurador está conectado:

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

enter image description here

Así que esto ha sido cubierto Ornithopter … pero su respuesta en realidad no dice “CÓMO” hacerlo. Las respuestas anteriores que dicen “escriba esto en su código” no funcionaron para mí.

Ejecute su aplicación. presione el botón en la foto, seleccione su proceso de fondo, para mí su sincronización. No sé si la sincronización es solo para adaptadores de sincronización.

Creo que debería hacerse programáticamente con android.os.Debug.waitForDebugger ();

Esto funciona en Android Studio. Puede haber una manera similar en Eclipse, supongo.

  1. ejecuta tu proyecto en modo de depuración
  2. adjuntar depurador a su proceso de servicio