【问题标题】:Preserving JSON quotes sent via adb shell保留通过 adb shell 发送的 JSON 引号
【发布时间】:2017-02-23 11:30:42
【问题描述】:

我正在尝试向活动发送 JSON 参数,但我似乎无法通过如下命令执行此操作:

adb shell am start -n <activity> -e argument_name '{"blah":"blah"}'

一旦我的应用程序获取到 JSON 字符串中的任何双引号(“blah”:“blah”变为 blah:blah),它们就会被删除。我必须先启动 adb shell,然后运行 ​​am start 以免引号被删除。这发生在 Windows Powershell 上。

我试过the solution suggested here by Jerry101 (i.e. custom handling of quotes),但没有帮助。我不想先进入 shell,因为我想从 Powershell 脚本自动启动 android 应用程序。这意味着运行 adb shell 命令,该命令会像上面的示例一样向 shell 发出命令(作为单行)。

【问题讨论】:

  • 不,因为那是针对 linux 的。而不是 "\" 应该是 Powershell 的任何转义字符
  • echo 'am start -n &lt;activity&gt; -e argument_name ''{"blah":"blah"}''' | adb shell

标签: android json powershell adb


【解决方案1】:

通过实验,我发现我需要在初始单引号内再添加一个单引号(并且每个单引号都需要使用一对转义)。双引号需要使用反斜杠字符进行转义。这是一个有效的示例:

adb shell am start -n <activity> -e argument_name '''{\"blah\":\"blah\"}'''

这适用于我的情况。接收方(Unity)看到双引号。

【讨论】:

    【解决方案2】:

    正如 cmets 中所指出的,您应该了解如何在 Powershell 中转义字符。

    另一种方法是创建一个包含您的命令的文件

    # file.sh
    am start -n <activity> -e argument_name '{"blah":"blah"}'
    

    然后

    adb push file.sh /storage/self/primary/file.sh
    adb shell sh /storage/self/primary/file.sh
    

    【讨论】:

    • 在我的例子中,我需要在我拥有的单引号内加上另一个单引号。我还需要使用反斜杠来转义双引号。所以正确的版本是:am start -n -e argument_name '''{\"blah\":\"blah\"}'''
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多