Я пытаюсь отправить данные 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, но его отключение не решает проблему и не ускользает от фигурных скобок или запятая не работает.
Кто-нибудь знает, что я делаю неправильно?
Ваш обходной путь был огромной помощью!
Это указывает на то, что проблема заключается в цитировании через две оболочки (хост плюс 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 локально, а внешняя пара передает ее удаленно. Эта внешняя пара в свою очередь "
задана».
Хорошо, я только нашел решение. Сначала я должен войти в оболочку устройств через оболочку adb shell
а затем выполнить am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver --es "notify" '{"debug": false, "title": "Application update!"}'
Я знаю, что это старый пост, но у меня есть мысли.
После борьбы за передачу данных через cmd и bash args, или подпроцесс в программе, я нашел, что использование base64 для кодирования json-данных сбрасываемых данных чрезвычайно удобно, просто base64-декодирует, а затем json загружает, не беспокоится о цитате, пробеле, вкладке и т. Д.