Отладка службы - PullRequest
       7

Отладка службы

54 голосов
/ 24 октября 2010

Я написал сервис с удаленным интерфейсом и установил его на 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 (который он есть), но он не отображается как поток отладки, и точки останова не запускаются, хотя службаповедение в порядке, насколько клиент видит это.Если я оберну тег службы в тег активности, который имеет связанный класс, и запущу его, я смогу отладить его

Можно ли отладить сервис, не заключая его в действие?

Ответы [ 5 ]

79 голосов
/ 29 июня 2011

Вот что вы можете сделать в четыре шага:

Первый : в первом интересном способе вашего сервиса (я использовал при создании):

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

Второй : установка точек останова в любом месте после команды waitForDebugger.

Третий : запуск приложения с помощью кнопки отладки в вашей среде IDE (Eclipse / Android Studio / ...).(Вероятно, вы уже должны были удалить основные действия по запуску из манифеста)

Last : Запустите adb и выполните команду для запуска службы:

  • cd $PLATFORM_TOOLS
  • adb shell
  • am startservice -n com.google.android.apps.gtalkservice/com.google.android.gtalkservice.service.GTalkService
22 голосов
/ 10 июня 2013

просто убедитесь, что вы не забыли эту строку кода в своем коде и выпустите свой apk. если вы попытаетесь запустить ваше приложение без отладчика, строка ниже застрянет.

android.os.Debug.waitForDebugger();

также вы можете использовать следующее, чтобы определить, подключен ли отладчик:

android.os.Debug.isDebuggerConnected(); //Determine if a debugger is currently attached.
20 голосов
/ 18 августа 2015

enter image description here

Изменить значок кнопки 2018 изменен

enter image description here

enter image description here

Это довольно просто, вы можете подключиться к службе приложений. Предполагая, что запуск отладчика не работает, вы можете нажать опцию выбора процесса, нажав отладку со значком стрелки, изображенным выше. Выберите службу, и теперь вы сможете отлаживать ее.

5 голосов
/ 13 июня 2011

Я думаю, что это должно быть сделано программно с android.os.Debug.waitForDebugger ();

2 голосов
/ 21 июля 2015

Это работает в Android Studio.Я полагаю, что в Eclipse может быть аналогичный способ.

  1. запустить проект в режиме отладки
  2. присоединить отладчик к процессу службы
...