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

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

Related of "如何从一个adb shell启动和停止android服务?"

我是一个Android的初学者,但得到这样的工作:

在AndroidManifest.xml中,确保你在<application>有这样的东西:

 <service android:name="com.some.package.name.YourServiceSubClassName" android:permission="com.some.package.name.YourServiceSubClassName"> <intent-filter> <action android:name="com.some.package.name.YourServiceSubClassName"/> </intent-filter> </service> 

其中YourServiceSubClassName扩展android.app.Service是你的java类是服务。 其中, com.some.package是AndroidManifest.xml和Java中的包名称。 使用javabeat.net文章作为帮助,查找<service>

还要注意,据说在包名和类名之间应该有.service. 在文本中,我想这是一些约定,但对我来说这导致了我还没有解决的ClassNotFoundException

然后,安装你的apk。 我从eclipse做,但也adb install -r yourApkHere.apk应该工作。 卸载是adb uninstall com.some.package.name ,顺便说一句。

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

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

有趣的是,我不需要-n

停下来 ,我用

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

希望能帮助到你。

因为我是初学者,所以请编辑/评论以解决任何误解(例如,可能与组件(?)名称中的.service. )有关)。

如果你想在adb shell中运行脚本,那么我正在尝试做同样的事情,但是使用一个应用程序。 我想你可以使用“am start”命令

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

 start an Activity: am start [-D] [-W] <INTENT> -D: enable debugging -W: wait for launch to complete **start a Service: am startservice <INTENT>** send a broadcast Intent: am broadcast <INTENT> start an Instrumentation: am instrument [flags] <COMPONENT> -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT) -e <NAME> <VALUE>: set argument <NAME> to <VALUE> -p <FILE>: write profiling data to <FILE> -w: wait for instrumentation to finish before returning start profiling: am profile <PROCESS> start <FILE> stop profiling: am profile <PROCESS> stop start monitoring: am monitor [--gdb <port>] --gdb: start gdbserv on the given port at crash/ANR <INTENT> specifications include these flags: [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>] [-c <CATEGORY> [-c <CATEGORY>] ...] [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...] [--esn <EXTRA_KEY> ...] [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...] [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...] [-n <COMPONENT>] [-f <FLAGS>] [--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] [<URI>] 

开始服务:

 adb shell am startservice ... 

开始一个服务。 选项是:–user | current:指定运行哪个用户; 如果未指定,则以当前用户身份运行。

停止服务:

 adb shell am stopservice ... 

停止服务。 选项是:–user | current:指定运行哪个用户; 如果未指定,则以当前用户身份运行。

我可以通过开始服务

 am startservice com.xxx/.service.XXXService 

但我不知道如何阻止它。

回应pzulw对sandroid的反馈意见。

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

它在第一个'/'处拆分string,将之前的部分作为包名称,之后的部分作为类名称。 作为一个特别的方便(例如,当在命令行上parsing组件名称时使用),如果紧跟“/”后面紧跟一个“。”。 那么最终的类名将是包名与string“/”后面的串联。 因此“com.foo/.Blah”变成了package =“com.foo”class =“com.foo.Blah”。

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

 <service android:exported="true" ></service> 

那么,你应该能够通过adb启动服务:

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

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

am startservice <INTENT>

或者实际上来自OS shell

adb shell am startservice <INTENT>

对于仍然困惑于如何定义服务名称参数的人来说,正斜杠会在完全限定类名称中的应用程序包名称后面。

所以给定一个应用程序包名称: app.package.name

以及服务的完整path: app.package.name.example.package.path.MyServiceClass

那么这个命令看起来像这样:

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

您需要添加android:exported="true"以从ADB命令行启动服务。 那么你的清单看起来像这样:

 <!-- Service declared in manifest --> <service android:name=".YourServiceName" android:exported="true" android:launchMode="singleTop"> <intent-filter> <action android:name="com.your.package.name.YourServiceName"/> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </service> <!-- Note: Service is exported to start it using ADB command --> 

然后从亚行

开始服务:

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

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

adb shell am stopservice com.your.package.name/.YourServiceName

停止服务(在果冻豆上):

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

亚行shell我startservice …启动一个服务。 选项是:–user | current:指定运行哪个用户; 如果未指定,则以当前用户身份运行。 停止服务:

亚行壳是停止服务…