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

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

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

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

Это указывает на то, что проблема заключается в цитировании через две оболочки (хост плюс 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 загружает, не беспокоится о цитате, пробеле, вкладке и т. Д.