Как запустить и остановить службу Android из оболочки adb?

Мне нужно написать оболочку script, чтобы запустить и остановить службу android.

Ответ 1

Я новичок в 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 extend android.app.Service - ваш класс java, который является сервисом. Где com.some.package - имя пакета, для меня как в AndroidManifest.xml, так и в Java. Использовал статью javabeat.net в качестве справки, ищите <service>

Обратите внимание, что между именем пакета и именем класса должно быть .service. в тексте, я предполагаю, что это какое-то соглашение, но для меня это вызвало ClassNotFoundException, что я еще не решил.

Затем установите apk. Я сделал это из затмения, но и adb install -r yourApkHere.apk должен работать. Удалить adb uninstall com.some.package.name, btw.

Вы можете запустить его из хост-системы, например, Просто тим и MrRoy:

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

Интересно, мне не понадобилось -n.

Чтобы остановить, я использую

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

Надеюсь, что это поможет.

Как я начинаю, пожалуйста, почувствуйте свободу передвижения для редактирования/комментария, чтобы исправить любые заблуждения (например, возможно, относительно .service. в имени компонента (?)).

Ответ 2

Если вы хотите запустить script в оболочке adb, то я пытаюсь сделать то же самое, но с приложением. Я думаю, вы можете использовать команду "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>]

Ответ 3

Запуск службы:

adb shell am startservice ...

запустите службу. Возможные варианты:     --user | current: укажите, какой пользователь должен запускаться как; если не         указанный затем выполняется как текущий пользователь.

Остановка службы:

adb shell am stopservice ... 

остановить службу. Возможные варианты:     --user | current: укажите, какой пользователь должен запускаться как; если не         указанный затем выполняется как текущий пользователь.

Ответ 4

Я могу начать сервис через

am startservice com.xxx/.service.XXXService

но я не знаю, как его остановить.

Ответ 5

Отвечая на обратную связь с песочницей о задании намерения.

Формат имени компонента описан в api docs для ComponentName.unflattenFromString

Он разбивает строку на первый '/', принимая часть раньше как имя пакета и часть после имени класса. В качестве особого удобства (для использования, например, при разборе имен компонентов в командной строке), если за "/" сразу следует символ "." то конечным именем класса будет конкатенация имени пакета с строкой, следующей за "/". Таким образом, "com.foo/.Blah" становится package = "com.foo" class= "com.foo.Blah".

Ответ 6

Вы должны установить для android: экспортированный атрибут службы значение "true", чтобы другие компоненты могли его вызывать. В файле AndroidManifest.xml добавьте следующий атрибут:

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

Затем вы сможете запустить службу через adb:

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

Для получения дополнительной информации об атрибуте android: exported см. эту страницу.

Ответ 7

am startservice <INTENT>  

или фактически из оболочки ОС

adb shell am startservice <INTENT>

Ответ 8

Для всех, кто все еще путается, как определить параметр имени службы, прямая косая черта идет сразу после имени пакета приложения в полностью квалифицированном имени класса.

Поэтому, учитывая имя пакета приложений: app.package.name

И полный путь к сервису: app.package.name.example.package.path.MyServiceClass

Тогда команда будет выглядеть так:

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

Ответ 9

Вам нужно добавить 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

Чтобы начать сервис:

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

Чтобы остановить обслуживание (на Marshmallow):

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

Чтобы остановить службу (на желе Bean):

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

Ответ 10

adb shell am launchervice... запустите службу. Возможные варианты: --user | current: укажите, какой пользователь должен запускаться как; если не указано, то запустите его как текущий пользователь. Остановка службы:

adb shell am stopervice...