Intereting Posts
Какая самая используемая кросс-платформенная платформа для разработки мобильных приложений сегодня? Как поместить идентификатор сеанса cookie в запрос волейбола? OAuth и пользовательская схема приводят к «ERR_UNKNOWN_URL_SCHEME» в Chrome Жизненный цикл фрагментации в отношении его активности Facebook Android Generate Key Hash Как вы можете обнаружить двухъядерный процессор на Android-устройстве из кода? Добавить заголовки для запроса, завернутые ClientResource в Restlet Множественные действия / фрагменты и шаблон представления представлений модели Android: Смешивание нескольких экземпляров AudioTrack? Как установить maxLines и эллипсис TextView одновременно Maps API v2 с различными действиями маркера RuntimeException: невозможно создать экземпляр приложения Линейная диаграмма AchartEngine Xaxis Android Android – добавление хотя бы одного действия с фильтром намерений ACTION-VIEW после обновления версии SDK версии 23 Фрагмент MyFragment не привязан к действию

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

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

Solutions Collecting From Web of "Как запустить и остановить службу Android из оболочки adb?"

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

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

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

Вы можете запустить его из хост-системы, как это, спасибо Just Tim и MrRoy :

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

Интересно, мне не нужно было -n .

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

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

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

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

Если вы хотите запустить скрипт в оболочке 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>] 

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

 adb shell am startservice ... 

Запустите службу. Возможные варианты: –user | Current: Укажите, какой пользователь должен запускаться как; Если не указан, то выполняйте его как текущий пользователь.

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

 adb shell am stopservice ... 

Остановите службу. Возможные варианты: –user | Current: Укажите, какой пользователь должен запускаться как; Если не указан, то выполняйте его как текущий пользователь.

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

 am startservice com.xxx/.service.XXXService 

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

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

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

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

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

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

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

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

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

am startservice <INTENT>

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

adb shell am startservice <INTENT>

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

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

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

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

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

Вам нужно добавить 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 shell am startservice com.your.package.name/.YourServiceName

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

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

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

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

Adb shell am launchervice … запустите службу. Возможные варианты: –user | Current: Укажите, какой пользователь должен запускаться как; Если не указан, то выполняйте его как текущий пользователь. Остановка службы:

Adb shell am stopervice …