android - 通过 ADB 在 android 广播中将 JSON 作为额外数据发送时格式不正确

标签 android json bash adb

我正在尝试在通过 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/

相关文章:

c# - Ajax 函数不显示 JSON 日期列表 (Mvc5)

bash - 当在循环内用管道替换时,MSYS2 bash 下降

bash - 如何使用通配符将一个目录的所有内容移动到新目录?

java - 如何在 Android 上使用 NFC 从扇区读取数据

Android - 新数据记录被添加到错误的联系人

json - 在 spring boot rest api 响应中排除空的 Hateoas "links"

JavaScript JSON 调用只会加载一次

bash - 无法在 AWS Codebuild 中运行 `source`

android - 最新 gradle 5.4.1 问题 - 字符串中未转义的撇号

java - 无法在我的 ListView 上的自定义 ArrayAdapter 中获取所选项目索引