El envío de JSON como datos adicionales en una transmisión de Android a través de ADB se formatea incorrectamente

Estoy tratando de enviar datos JSON como extra en una transmisión de Android que envío a través de ADB al dispositivo. Pero parece que los datos que llegan al dispositivo no son los esperados.

Lo que ejecuto:

adb shell am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver -e "notify" '{"debug": false, "title": "Application update!"}' 

Lo que espero como datos adicionales:

 {"debug": false, "title": "Application update!"} 

Lo que obtengo como datos adicionales:

 "debug": false 

Si envío {"debug": false "title": "Application update!"} Como datos adicionales, entonces obtendré {"debug": false "title": "Application update!"} Como datos adicionales (anotando la coma que falta) . Así que supongo que tiene algo que ver con Brace Expansión de mi bash, pero apagarlo no resuelve el problema y escapar de los tirantes o la coma no está funcionando.

¿Alguien tiene una idea de lo que estoy haciendo mal?

Su solución fue una gran ayuda!

Indica que el problema está en citar a través de dos shells (host más Android). Shell cotizando es una horrible tarpit pero hay extra weirdness extra aquí.

Después de experimentar con comandos "echo", encontré que el argumento de shell de adb debe ser citado como un argumento único para el shell local y la carga útil de JSON debe ser citada como un solo argumento para el shell de Android.

He aquí una solución general (y no requiere aspersión \ -quoting de " , ! , { , Y } chars en el texto 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!"}'"'" 

Patrón: adb shell "am broadcast ... '"'JSON_TEXT'"'"

El par de marcas internas cita el JSON_TEXT localmente mientras el par externo lo cita remotamente. Ese par externo es a su vez " -citado.

Ok, acabo de encontrar una solución. Primero tengo que entrar en el shell de dispositivos vía adb shell y luego ejecutar am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver --es "notify" '{"debug": false, "title": "Application update!"}'

Sé que esto es un viejo post, pero tengo algunos pensamientos.

Después de la lucha para pasar datos a través de cmd y bash args, o subprocesos en el programa, he encontrado el uso de base64 para codificar json dumped datos es muy conveniente, sólo base64 decodificar y luego json cargas, no te preocupes por cita, espacio, ficha, nada.

  • Retrofit: Se esperaba BEGIN_OBJECT pero era BEGIN_ARRAY
  • cómo mostrar los datos json obtenidos en listview usando baseadapter
  • Creación de un menú desplegable desde un archivo .json
  • ¿Cuál es la forma estándar de publicar el objeto JSON junto con el archivo utilizando MultipartEntityBuilder y el cliente HTTP en Android
  • Cómo ignorar un elemento JSON en Android Retrofit
  • Cómo mostrar la imagen (matriz de bytes) de JSON en imageView ... Factory devuelve null
  • Android cómo convertir json array a string array
  • Los objetos Json de Android / Java cuentan
  • NoSQL DB para Android que MongoDB y CouchDB?
  • Cómo convertir caracteres de indicador a caracteres Unicode Escaped
  • Android Retrofit | Publicar objeto personalizado (enviar json al servidor)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.