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!"}'