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

Я написал службу с удаленным интерфейсом и установил ее на своем ПК 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

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

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

/* (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 любом месте после команды 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

Ответ 2

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

android.os.Debug.waitForDebugger();

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

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

Ответ 3

enter image description here

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

enter image description here

enter image description here

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

Ответ 4

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

Ответ 5

Это работает в Android Studio. Возможно, аналогичный подход в Eclipse я предполагаю.

  • запустить проект в режиме отладки
  • присоединить отладчик к вашему сервису

Ответ 6

в моем случае я изменил пакет App и забыл обновить тег процесса в манифесте объявления сервиса...