Подтвердить что ты не робот

Отправка JSON в качестве дополнительных данных в широковещательной передаче по протоколу Android через ADB неправильно отформатирована

Я пытаюсь отправить данные JSON в качестве дополнительной информации на Android-трансляцию, которую я отправляю через ADB на устройство. Но похоже, что данные, поступающие на устройство, не ожидаются.

Что я выполняю:

adb shell am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver -e "notify" '{"debug": false, "title": "Application update!"}'

Что я ожидаю в качестве дополнительных данных:

{"debug": false, "title": "Application update!"}

Что я получаю за дополнительные данные:

"debug": false

Если я отправлю {"debug": false "title": "Application update!"} в качестве дополнительных данных, я получаю {"debug": false "title": "Application update!"} в качестве дополнительных данных (отмечая недостающую запятую). Поэтому я предполагаю, что это имеет какое-то отношение к Brace Expansion моего bash, но его отключение не решает проблему и ускользает от фигур, или запятая не работает.

Кто-нибудь знает, что я делаю неправильно?

4b9b3361

Ответ 1

ok, я нашел решение. Сначала я должен войти в оболочку устройств через adb shell, а затем выполнить am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver --es "notify" '{"debug": false, "title": "Application update!"}'

Ответ 2

Ваше обходное решение было огромной помощью!

Это указывает на то, что проблема заключается в цитировании через две оболочки (хост плюс Android). Оболочка Shell - ужасный брезент, но здесь есть серьезная лишняя странность.

После экспериментов с командами "echo" я обнаружил, что аргумент оболочки adb должен быть указан как один аргумент локальной оболочки, а полезная нагрузка JSON должна указываться как один аргумент для оболочки Android.

Здесь общее решение (и не требуется разбрасывать \ -котирование символов ", !, { и } в тексте JSON):

adb shell "am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver -e notify '"'{"debug": false, "title": "Application update!"}'"'"

Выкройка: adb shell "am broadcast ... '"'JSON_TEXT'"'"

Внутренняя пара меток ' цитирует JSON_TEXT локально, а внешняя пара передает ее удаленно. Эта внешняя пара, в свою очередь, " -quoted.

Ответ 3

Я знаю, что это старый пост, но у меня есть некоторые мысли.

после борьбы за передачу данных через cmd и bash args или подпроцесс в программе, я нашел, что base64 для кодирования json-данных сбрасывается чрезвычайно удобно, просто base64-декодирует, а затем json загружает, не беспокоится о цитате, пробеле, вкладке, что угодно.