Отладка службы
Я написал службу с удаленным интерфейсом и установил ее на своем ПК 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 и забыл обновить тег процесса в манифесте объявления сервиса...