代码之家  ›  专栏  ›  技术社区  ›  NickT

调试服务

  •  53
  • NickT  · 技术社区  · 14 年前

    我已经编写了一个带有远程接口的服务,并将其安装在我的PC机的EclipseAVD上。我有一个客户端测试工具,它启动并调用服务中的方法。最初,我通过一个控件类和活动安装了该服务,现在已将其删除,因此该服务的清单如下所示:

    <?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中的debug图标启动它时,控制台告诉我它正在安装apk(它就是apk),但它并没有显示为调试线程,断点也不会被触发,尽管就客户机所见,服务的行为是正常的。如果我将服务标记包装在一个具有关联类的活动标记中并启动它,那么我可以调试它

    是否可以在不将服务包装到活动中的情况下对其进行调试?

    5 回复  |  直到 14 年前
        1
  •  79
  •   Yida Lin    5 年前

    以下是四个步骤:

    弗斯特 :在您服务的第一个有趣的方法中(我在create中使用了):

    /* (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/…)。(您现在可能已经从清单中删除了主启动活动)

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

    • cd $PLATFORM_TOOLS
    • adb shell
    • am startservice -n com.google.android.apps.gtalkservice/com.google.android.gtalkservice.service.GTalkService
        2
  •  22
  •   Gilson    11 年前

    确保你不会忘记你的代码中的这一行代码,然后释放你的apk。 如果你尝试在没有调试器的情况下运行你的应用程序,下面这一行将被卡住。

    android.os.Debug.waitForDebugger();
    

    此外,还可以使用以下命令来确定调试器是否已连接:

    android.os.Debug.isDebuggerConnected(); //Determine if a debugger is currently attached.
    
        3
  •  21
  •   StarWind0    6 年前

    enter image description here

    编辑2018按钮图标已更改

    enter image description here

    enter image description here

    这很简单,您可以连接到应用程序服务。假设运行调试器不起作用,您可以按带有上图箭头图标的debug来选择进程选项。选择您的服务,您现在应该能够调试您的服务。

        4
  •  5
  •   vipw    13 年前

    我认为应该用android.os.Debug.waitForDebugger()以编程方式完成;

        5
  •  2
  •   Ornithopter    9 年前

    这在Android工作室工作。我想在Eclipse中可能也有类似的方法。

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