2017-02-03 3 views
0

Я пытаюсь отправить JSON аргумент деятельности, и кажется, что я не могу сделать это с помощью команды, как следующие:Консерванты JSON котировки, отправленные через ADB оболочки

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

Любые двойные кавычки внутри строки JSON удаляются, как только мое приложение получает их («blah»: «blah» становится blah: blah). Сначала я должен запустить оболочку adb, а затем запустить start, чтобы кавычки не удалялись. Это происходит в Windows Powershell.

Я пробовал the solution suggested here by Jerry101 (i.e. custom handling of quotes), но это не помогло. Я бы предпочел не входить в оболочку сначала, потому что я хочу автоматизировать запуск приложений Android из сценария Powershell. Это означает выполнение команды adb shell, которая запускает команды в оболочку, как пример выше (как однострочный).

+0

Нет, потому что это для Linux. вместо «\» должен быть любой escape-символ для Powershell – Chisko

+2

Возможный дубликат [Экранирование цитат и двойных кавычек] (http://stackoverflow.com/questions/18116186/escaping-quotes-and-double-quotes) – Chisko

+0

'echo 'am start -n -e argument_name' '{"blah": "blah"}' '' | adb shell' –

ответ

1

Как указано в комментариях, вы должны узнать, как избежать символов в 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 
+0

В моем случае мне нужно было поставить еще одну цитату внутри одиночных кавычек, которые у меня были. Мне также нужно было использовать обратную косую черту, чтобы избежать двойных кавычек. Поэтому правильная версия: am start -n -e имя_файла '' '{\ "blah \": \ "blah \"}' '' – luxchar

0

с помощью экспериментов, я понял, что мне нужен другой одинарной кавычки внутри исходных одинарные кавычки (и каждая отдельная кавычка должна быть экранирована, используя пару из них). Двойные кавычки должны быть экранированы с использованием символа обратной косой черты. Вот пример, который работает:

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

Это работает для моего дела. Принимающая сторона (которая является единством) видит двойные кавычки.

Смежные вопросы