我正在尝试在通过 ADB 发送到设备的 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!"}'
我期望的额外数据:
{"debug": false, "title": "Application update!"}
我得到的额外数据:
"debug": false
如果我发送 {"debug": false "title": "Application update!"}
作为额外数据然后我得到 {"debug": false "title": "Application update!"}
作为额外数据(注意缺少的逗号)。所以我认为它与我的 bash 的大括号扩展有关,但关闭它并不能解决问题,并且转义大括号或逗号不起作用。
我做错了什么?
最佳答案
您的解决方法帮了大忙!
说明问题出在通过两个shell(主机加安卓)引用。 Shell 引用是一个可怕的 tarpit,但这里还有严重的额外怪异之处。
在尝试“echo”命令后,我发现 adb shell 的参数必须作为本地 shell 的单个参数引用,而 JSON 负载必须作为 Android shell 的单个参数引用。
这是一个通用的解决方案(它不需要散布 \
-引用 "
, !
, {
和 }
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,而外部对在远程引用它。外对又被 "
引用。
关于android - 通过 ADB 在 android 广播中将 JSON 作为额外数据发送时格式不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27940118/