android adb 命令启动,如何从adb shell启动和停止android服务?

本文介绍了如何使用ADB命令从命令行启动和停止Android服务。包括设置服务的exported属性,使用am startservice和am force-stop命令的具体语法,并提供了不同Android版本下的操作示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何从adb shell启动和停止android服务?

我需要编写一个Shell脚本来启动和停止android服务。

10个解决方案

43 votes

我是Android的初学者,但是可以这样工作:

在AndroidManifest.xml中,确保您在.service.内部具有以下内容:

.service.扩展其中adb uninstall com.some.package.name是您的服务的Java类。 对于我来说,其中com.some.package是程序包名称,在AndroidManifest.xml和Java中都是如此。使用了javabeat.net文章作为帮助,查找

还要注意,在文本中应该在包名称和类名称之间应该有.service.,我想这是一些约定,但是对我来说,这引起了adb uninstall com.some.package.name,但我尚未解决。

然后,安装您的apk。 我从日食中所做过,但.service.也应该起作用。 卸载是adb uninstall com.some.package.name,btw。

您可以像这样从主机系统启动它,谢谢Tim和MrRoy:

adb shell am startservice com.some.package.name/.YourServiceSubClassName

有趣的是,我不需要.service.。

要停止,我用

adb shell am force-stop com.some.package.name

希望能帮助到你。

由于我是初学者,请随时进行编辑/注释以纠正任何误解(例如,组件名称(?)中可能涉及.service.)。

n611x007 answered 2020-06-26T20:10:57Z

17 votes

启动服务:

adb shell am startservice ...

启动服务。 选项有: -用户| 当前:指定以哪个用户身份运行; 如果不 指定,然后以当前用户身份运行。

停止服务:

adb shell am stopservice ...

停止服务。 选项有: -用户| 当前:指定以哪个用户身份运行; 如果不 指定,然后以当前用户身份运行。

bonnyz answered 2020-06-26T20:11:30Z

13 votes

如果您想在adb shell中运行脚本,那么我尝试使用应用程序执行相同的操作。 我认为您可以使用“ am start”命令

用法:am [子命令] [选项]

start an Activity: am start [-D] [-W]

-D: enable debugging

-W: wait for launch to complete

**start a Service: am startservice **

send a broadcast Intent: am broadcast

start an Instrumentation: am instrument [flags]

-r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)

-e : set argument to

-p : write profiling data to

-w: wait for instrumentation to finish before returning

start profiling: am profile start

stop profiling: am profile stop

start monitoring: am monitor [--gdb ]

--gdb: start gdbserv on the given port at crash/ANR

specifications include these flags:

[-a ] [-d ] [-t ]

[-c [-c ] ...]

[-e|--es ...]

[--esn ...]

[--ez ...]

[-e|--ei ...]

[-n ] [-f ]

[--grant-read-uri-permission] [--grant-write-uri-permission]

[--debug-log-resolution]

[--activity-brought-to-front] [--activity-clear-top]

[--activity-clear-when-task-reset] [--activity-exclude-from-recents]

[--activity-launched-from-history] [--activity-multiple-task]

[--activity-no-animation] [--activity-no-history]

[--activity-no-user-action] [--activity-previous-is-top]

[--activity-reorder-to-front] [--activity-reset-task-if-needed]

[--activity-single-top]

[--receiver-registered-only] [--receiver-replace-pending]

[]

sandroid answered 2020-06-26T20:11:54Z

10 votes

我可以通过开始服务

am startservice com.xxx/.service.XXXService

但是我还不知道如何阻止它。

MrROY answered 2020-06-26T20:12:19Z

7 votes

您应将服务的android:exported属性设置为“ true”,以允许其他组件调用它。 在AndroidManifest.xml文件中,添加以下属性:

然后,您应该能够通过adb启动该服务:

adb shell am startservice com.package.name/.YourServiceName

有关android:exported属性的更多信息,请参见此页面。

AmitB answered 2020-06-26T20:12:47Z

6 votes

响应pzulw对sandroid的有关指定意图的反馈。

组件名称的格式在ComponentName.unflattenFromString的api文档中进行了描述

它在第一个“ /”处拆分字符串,将前面的部分作为程序包名称,将后面的部分作为类名称。 作为一种特殊的便利(例如,在命令行上解析组件名称时使用),如果在'/'之后紧跟一个'。'。 那么最终的类名称将是包名称与“ /”后面的字符串的串联。 因此,“ com.foo/.Blah”成为package =“ com.foo” class =“ com.foo.Blah”。

Just a Tim answered 2020-06-26T20:13:17Z

6 votes

使用时可能会出现错误“ *错误:应用程序在后台*”

adb shell am startservice

在奥利奥(26岁以上)。 这需要前台的服务。使用以下内容。

adb shell am start-foreground-service com.some.package.name/.YourServiceSubClassName

Kiran k g answered 2020-06-26T20:13:41Z

5 votes

您需要添加adb shell am force-stop com.your.package.name以从ADB命令行启动服务。 然后您的清单看起来像这样:

android:name=".YourServiceName"

android:exported="true"

android:launchMode="singleTop">

然后从亚行

要开始服务:

adb shell am force-stop com.your.package.name

停止服务(在棉花糖上):

adb shell am force-stop com.your.package.name

停止服务(在Jelly Bean上):

adb shell am force-stop com.your.package.name

Atul answered 2020-06-26T20:14:31Z

2 votes

adb shell am startservice

或实际上是从OS Shell

adb shell am startservice

DonGru answered 2020-06-26T20:15:00Z

1 votes

对于仍对如何定义服务名参数感到困惑的任何人,正斜杠会在完全限定的类名中紧随应用程序包名称之后。

因此,给出了一个应用程序包名称:app.package.name.example.package.path.MyServiceClass

并提供以下服务的完整途径:app.package.name.example.package.path.MyServiceClass

然后,该命令将如下所示:

adb shell am startservice app.package.name/.example.package.path.MyServiceClass

TheIT answered 2020-06-26T20:15:33Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值