Sending JSON as extra data in an android broadcast via ADB gets incorrectly formatted
Your workaround was a huge help!
It indicates that the problem is in quoting through two shells (host plus Android). Shell quoting is a horrible tarpit but there's serious extra weirdness here.
After experimenting with "echo" commands, I found that adb shell's argument must be quoted as a single argument to the local shell and the JSON payload must be quoted as a single argument to the Android shell.
Here's a general solution (and it doesn't require sprinkling \
-quoting of "
, !
, {
, and }
chars in the JSON text):
adb shell "am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver -e notify '"'{"debug": false, "title": "Application update!"}'"'"
Pattern: adb shell "am broadcast ... '"'JSON_TEXT'"'"
The inner pair of '
marks quotes the JSON_TEXT locally while the outer pair quotes it remotely. That outer pair is in turn "
-quoted.
ok, I just found a solution. I first have to enter the devices shell via adb shell
and then execute am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver --es "notify" '{"debug": false, "title": "Application update!"}'