Wie starte und stoppe ich den Android-Dienst von einer Adb-Shell?

Lesezeit: 6 Minuten

Ich muss ein Shell-Skript schreiben, um einen Android-Dienst zu starten und zu stoppen.

  • Ich habe versucht, eine zu initiieren adb shell whatsapp Backup .. Ich könnte eine finden service ( com.whatsapp.backup.google.GoogleBackupService ) das klang in der Nähe des WhatsApp-Sicherungsdienstes, aber nein activity zum com.whatsapp . Gebastelt mit dem Befehl mit verschiedenen Combos, aber es gab einen Fehler. Hier ist die Ausgabe. Aufgrund der Kommentarbeschränkung kann ich es hier nicht direkt einfügen. Wie bekomme ich das hin? Whatsapp Chat backup over adb? paste.c-net.org/AlreadyLeveled

    – Benutzer1874594

    12. April um 14:41 Uhr

Benutzer-Avatar
n611x007

Ich bin ein Anfänger in Android, aber es funktioniert so:

Stellen Sie in AndroidManifest.xml sicher, dass Sie drinnen sind <application>habe sowas:

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

wo YourServiceSubClassName erweitern android.app.Service ist Ihre Java-Klasse, die der Dienst ist. Wo com.some.package ist der Paketname, bei mir sowohl in AndroidManifest.xml als auch in Java. Gebraucht ein javabeat.net-Artikel als Hilfe suchen <service>

Beachten Sie auch, dass angeblich zwischen dem Paketnamen und dem Klassennamen sein sollte .service. im Text, ich denke, das ist eine Konvention, aber für mich hat dies verursacht ClassNotFoundException die ich noch lösen muss.

Installieren Sie dann Ihre apk. Ich habe von Eclipse aber auch adb install -r yourApkHere.apk sollte arbeiten. Deinstallieren ist adb uninstall com.some.package.nameübrigens.

Du kannst Anfang es vom Host-System so, danke Just a Tim und MrRoy:

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

Interessanterweise brauchte ich es nicht -n.

Zu PauseIch benutze

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

Ich hoffe es hilft.

Da ich ein Anfänger bin, können Sie gerne bearbeiten / kommentieren, um Missverständnisse zu beheben (z. B. wahrscheinlich bzgl .service. im Namen der Komponente (?).

  • Deshalb erhalte ich diesen Fehler? $ am startservice com.adguard.android/.vpn.AdguardVpnService Dienst starten: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.adguard.android/.vpn.AdguardVpnService } Fehler: Erfordert die Berechtigung android.permission.BIND_VPN_SERVICE

    – Michele Dall’Agata

    25. Juli 2017 um 10:01 Uhr

  • Ich habe versucht, eine zu initiieren adb shell whatsapp Backup .. Ich könnte eine finden service ( com.whatsapp.backup.google.GoogleBackupService ) das klang in der Nähe des WhatsApp-Sicherungsdienstes, aber nein activity zum com.whatsapp . Gebastelt mit dem Befehl mit verschiedenen Combos, aber es gab einen Fehler. Hier ist die Ausgabe. Aufgrund der Kommentarbeschränkung kann ich es hier nicht direkt einfügen. Wie bekomme ich das hin? Whatsapp Chat backup over adb? paste.c-net.org/AlreadyLeveled

    – Benutzer1874594

    12. April um 14:39 Uhr

Beginnend Ein Dienst:

adb shell am startservice ...

Starten Sie einen Dienst. Optionen sind: –user | aktuell: Geben Sie an, als welcher Benutzer ausgeführt werden soll; wenn nicht angegeben, dann als aktueller Benutzer ausführen.

Anhalten Ein Dienst:

adb shell am stopservice ... 

Stoppen Sie einen Dienst. Optionen sind: –user | aktuell: Geben Sie an, als welcher Benutzer ausgeführt werden soll; wenn nicht angegeben, dann als aktueller Benutzer ausführen.

Benutzer-Avatar
Kiran kg

Möglicherweise erhalten Sie während der Verwendung die Fehlermeldung „*Error: app is in background *“.

adb shell am startservice 

im Oreo (26+). Dies erfordert Dienstleistungen im Vordergrund. Verwenden Sie Folgendes.

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

Wenn Sie das Skript in der Adb-Shell ausführen möchten, versuche ich dasselbe, jedoch mit einer Anwendung. Ich denke, Sie können den Befehl “am start” verwenden

Verwendung: am [subcommand] [options]

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

Ich kann den Dienst durch starten

am startservice com.xxx/.service.XXXService

aber ich weiß noch nicht wie ich das stoppen kann.

  • Sie können einen Rundfunkempfänger verwenden, um einen Dienst zu stoppen, und dann eine Sendung an diesen Empfänger senden.

    – shaobin0604

    16. Juli 2012 um 7:40 Uhr

Benutzer-Avatar
Atul

Sie müssen hinzufügen android:exported="true" um den Dienst über die ADB-Befehlszeile zu starten. Dann sieht Ihr Manifest in etwa so aus:

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

Und dann von ADB

So starten Sie den Dienst:

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

So beenden Sie den Dienst (auf Marshmallow):

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

So stoppen Sie den Dienst (auf Jelly Bean):

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

  • Sie können einen Rundfunkempfänger verwenden, um einen Dienst zu stoppen, und dann eine Sendung an diesen Empfänger senden.

    – shaobin0604

    16. Juli 2012 um 7:40 Uhr

Benutzer-Avatar
AmitB

Sie sollten das Attribut android:exported des Dienstes auf „true“ setzen, damit andere Komponenten es aufrufen können. Fügen Sie in der Datei AndroidManifest.xml das folgende Attribut hinzu:

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

Dann sollten Sie den Dienst über adb starten können:

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

Weitere Informationen zum android:exported-Attribut finden Sie unter diese Seite.

1216050cookie-checkWie starte und stoppe ich den Android-Dienst von einer Adb-Shell?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy