我正在尝试在通过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的Brace扩展有关,但是关闭它并不能解决问题并且逃避括号或逗号无效。
有人知道我做错了什么吗?
答案 0 :(得分:19)
你的解决方法是一个巨大的帮助!
它表明问题在于引用两个shell(主机加Android)。壳牌报价是一个可怕的停机坪,但这里有一些严重的怪异。
在尝试使用“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,而外部引用远程引用它。该外部对依次为"
- 引用。
答案 1 :(得分:5)
adb shell
输入设备shell,然后执行am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver --es "notify" '{"debug": false, "title": "Application update!"}'
答案 2 :(得分:0)
这应该是adb命令的结构。
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'"
上述命令将确保将意图传递给接收者,即使该字符串中有空格。
adb shell "am broadcast -a wingoku.custom.invoking.event -n com.wingoku.root/.broadcastReceivers.MyReceiver-e 'shellCommand' 'hello world. My name is umer'"
答案 3 :(得分:-1)
我知道这是一个老帖子,但我有一些想法。
在通过cmd和bash args或程序中的子进程进行数据传递之后,我发现使用base64来编码json转储数据非常方便,只需要base64解码然后json加载,不用担心引用,空格,制表符,任何东西