Sending JSON as extra data in an android broadcast via ADB gets incorrectly formatted

前端 未结 4 636
暖寄归人
暖寄归人 2021-01-04 07:42

I\'m trying to send JSON data as extra on an Android broadcast which I send via ADB to the device. But it looks like the data which gets to the device is not as expected.

相关标签:
4条回答
  • 2021-01-04 07:54

    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.

    0 讨论(0)
  • 2021-01-04 07:54

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

    0 讨论(0)
  • 2021-01-04 08:01

    This should be the structure of the adb command.

    adb shell "am broadcast -a YOUR_BROADCAST_INTENT_ACTION -n YOUR_APP_PACKAGE/.PATH_TO_BROADCAST_RECIEVER_CLASS.BROADCAST_RECEIVER_CLASS -e 'STRING_KEY' 'DATA HERE'"
    

    The above command will ensure delivery of the intent to the receiver even if the string has spaces in it.

    adb shell "am broadcast -a wingoku.custom.invoking.event -n com.wingoku.root/.broadcastReceivers.MyReceiver-e 'shellCommand' 'hello world. My name is umer'"
    
    0 讨论(0)
  • 2021-01-04 08:08

    i know this is an old post, but i have some thoughts.

    after struggle to pass data through cmd and bash args, or subprocess in program, i found use base64 to encode json dumped data is extremely convenient, just base64 decode and then json loads, no worry about quote, space, tab, anything.

    0 讨论(0)
提交回复
热议问题