debugging服务

我已经写了一个远程接口的服务,并将其安装在我的PC的Eclipse AVD上。 我有一个客户端testing工具,用于启动和调用服务中的方法。 最初,我通过控件类和活动安装了服务,现在我已经移除了该服务,以便该服务的清单看起来像:

<?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中的debugging图标启动它时,控制台告诉我它正在安装apk(它是),但它不会显示为debugging线程,并且不会触发断点,尽pipe服务的行为是一致的客户看到它。 如果我把服务标签包装在一个具有关联类的activity标签中,然后启动它,那么我可以debugging它

有没有可能debugging服务,而不包装在一个活动?

以下是您可以分四步执行的操作:

首先:在您的服务的第一个有趣的方法(我用于创build):

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

第二:在waitForDebuggerCommand之后设置断点。

第三:通过Eclipse中的debuggingbutton启动应用程序。 (您现在应该已经从清单中删除了主要的启动活动)

最后:启动adb并运行命令启动服务:

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

只要确保你不要忘记你的代码中的这一行代码,并释放你的apk。 如果您尝试在没有debugging器的情况下运行您的应用程序,则下面的行会卡住。

 android.os.Debug.waitForDebugger(); 

您也可以使用以下来确定debugging器是否连接:

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

在这里输入图像说明

所以这已经涵盖了Ornithopter …但他们的答案并没有实际说“怎么做”。 上面的回答说“写在你的代码”的东西没有为我工作。

运行你的应用程序 按照片中的button,select你的背景进程,为我同步。 我不知道同步是否仅适用于同步适配器。

我认为这应该用android.os.Debug.waitForDebugger()来编程完成。

这在Android Studio中有效。 我猜想Eclipse中可能有类似的方法。

  1. 在debugging模式下运行您的项目
  2. 将debugging器附加到您的服务进程

在我的情况下,我更改了应用程序包,忘记更新清单服务声明中的过程标签…