如何从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