Мне нужно написать оболочку script, чтобы запустить и остановить службу android.
Как запустить и остановить службу Android из оболочки adb?
Ответ 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...