sirve reconoce que para interno externo descargar debug como comandos comando android service adb

reconoce - ¿Cómo iniciar y detener el servicio de Android desde un shell adb?



android debug bridge descargar (9)

Necesito escribir un script de shell para iniciar y detener un servicio de Android.


Debe establecer el atributo android: exported del servicio en "true", para permitir que otros componentes lo invoquen. En el archivo AndroidManifest.xml, agregue el siguiente atributo:

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

Entonces, debería poder comenzar el servicio a través de adb:

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

Para obtener más información sobre el atributo android: exported, consulte esta página .


Necesita agregar android:exported="true" para iniciar el servicio desde la línea de comando de ADB. Entonces tu manifiesto se ve así:

<!-- 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 -->

Y luego de ADB

Para comenzar el servicio:

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

Para detener el servicio (en Marshmallow):

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

Para detener el servicio (en Jelly Bean):

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


Para cualquier persona que todavía esté confundida acerca de cómo definir el parámetro del nombre del servicio, la barra diagonal va inmediatamente después del nombre del paquete de la aplicación en el nombre de la clase completamente calificado.

Así que se le da un nombre de paquete de aplicación de: app.package.name

Y una ruta completa al servicio de: app.package.name.example.package.path.MyServiceClass

Entonces el comando se vería así:

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


Puedo comenzar el servicio a través de

am startservice com.xxx/.service.XXXService

pero no sé cómo pararlo todavía


Respondiendo a los comentarios de pzulw a sandroid sobre la especificación de la intención.

El formato del nombre del componente se describe en api docs for ComponentName.unflattenFromString

Divide la cadena en el primer ''/'', tomando la parte anterior como el nombre del paquete y la parte posterior como el nombre de la clase. Como una conveniencia especial (para usar, por ejemplo, al analizar nombres de componentes en la línea de comandos), si el ''/'' es seguido inmediatamente por un ''.'' luego, el nombre de la clase final será la concatenación del nombre del paquete con la cadena que sigue a ''/''. Por lo tanto, "com.foo/.Blah" se convierte en package = "com.foo" class = "com.foo.Blah".


Si desea ejecutar el script en adb shell, entonces estoy tratando de hacer lo mismo, pero con una aplicación. Creo que puedes usar el comando "am start"

uso: am [subcomando] [opciones]

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>]


Soy un principiante en Android, pero lo hice funcionar así:

en AndroidManifest.xml, asegúrese de que, dentro de <application> , tenga algo como esto:

<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>

donde YourServiceSubClassName extiende android.app.Service es su clase java que es el servicio. Donde com.some.package es el nombre del paquete, para mí tanto en AndroidManifest.xml como en Java. Usó un artículo de javabeat.net como ayuda, busque <service>

Tenga en cuenta también que, supuestamente, entre el nombre del paquete y el nombre de la clase debe haber .service. en el texto, supongo que esto es una convención, pero para mí esto causó la ClassNotFoundException que aún tengo que resolver.

Luego, instala tu apk. Lo hice desde eclipse pero también adb install -r yourApkHere.apk debería funcionar. Desinstalar es adb uninstall com.some.package.name , btw.

Puede iniciarlo desde un sistema host como este, gracias Just a Tim y MrRoy :

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

curiosamente, no necesité -n .

Para parar , yo uso

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

Espero eso ayude.

Como soy un principiante, no dude en editar / comentar para corregir cualquier concepto erróneo (por ejemplo, probablemente con respecto a .service. en el nombre del componente (?)).


am startservice <INTENT>

o en realidad desde el shell del sistema operativo

adb shell am startservice <INTENT>


Comenzando un servicio:

adb shell am startservice ...

iniciar un servicio Las opciones son: --user | actual: especifique qué usuario ejecutar como; si no se especifica, ejecuta como el usuario actual.

Detener un servicio:

adb shell am stopservice ...

detener un servicio Las opciones son: --user | actual: especifique qué usuario ejecutar como; si no se especifica, ejecuta como el usuario actual.