调试服务

Nic*_*ckT 54 android android-manifest

我用远程接口编写了一个服务,并将其安装在我的PC的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>   
Run Code Online (Sandbox Code Playgroud)

所以没有活动标签.

当我从Eclipse中的调试图标启动它时,控制台告诉我它正在安装apk(它是),但它不会显示为调试线程并且不会触发断点,尽管服务的行为是可以的客户看到了它.如果我将服务标签包装在具有关联类的活动标签中并启动它,那么我可以调试它

是否可以调试服务而不将其包装在活动中?

Bri*_*ney 79

以下是您可以通过四个步骤执行的操作:

第一:在你服务的第一个有趣的方法(我用于创建):

/* (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
}
Run Code Online (Sandbox Code Playgroud)

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

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

上一篇:启动adb并运行命令以启动服务:

  • waitForDebugger
  • cd $PLATFORM_TOOLS
  • adb shell

  • 请注意,"waitForDebugger"行并不意味着该服务将在该行中断.它只是意味着"开始观察断点,并停止*对它们*" (4认同)
  • 警告 - 这也意味着如果未真正附加调试器,则不会执行该语句后面的代码. (4认同)

Gil*_*son 22

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

android.os.Debug.waitForDebugger();
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下内容来确定调试器是否已连接:

android.os.Debug.isDebuggerConnected(); //Determine if a debugger is currently attached.
Run Code Online (Sandbox Code Playgroud)


Sta*_*nd0 21

在此输入图像描述

编辑2018按钮图标已更改

在此输入图像描述

在此输入图像描述

这很简单,您可以连接到您的应用程序服务.假设运行调试器不起作用,您可以按下上图所示的箭头图标调试按下选择过程选项.选择您的服务,您现在应该能够调试您的服务.

  • 这应该是接受的答案.它很容易,就像一个魅力.唯一的问题是图像上的按钮被称为"将调试器附加到Android进程",它可以在"运行 - >将调试器附加到Android进程"下找到(这是Android Studio 3.1.2中的最后一个选项). (2认同)

vip*_*ipw 5

我认为应该用android.os.Debug.waitForDebugger()进行编程.