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.