Отправка 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, но его отключение не решает проблему и ускользает от фигур, или запятая не работает.
Кто-нибудь знает, что я делаю неправильно?
Ответы
Ответ 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 загружает, не беспокоится о цитате, пробеле, вкладке, что угодно.