Das Senden von JSON als zusätzliche Daten in einer Android-Übertragung über ADB wird falsch formatiert

Ich versuche, JSON-Daten als extra auf eine Android-Sendung zu schicken, die ich per ADB an das Gerät schicke. Aber es sieht so aus wie die Daten, die zum Gerät kommen, ist nicht wie erwartet.

Was ich ausführe:

  • Ubuntu: Android-Geräte debuggen
  • Wo ist die ausgelieferte apk-Datei? Wie kann ich es mit adb deinstallieren?
  • ADB - Android - Den Namen der aktuellen Aktivität erhalten
  • ADB-Fehler: kann keine Verbindung zum Daemon herstellen
  • Wie kann ich die automatische Show von ADB-Konsolen in Eclipse ausschalten?
  • Android-Gerät wird nicht in der Adl-Liste angezeigt
  • adb shell am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver -e "notify" '{"debug": false, "title": "Application update!"}' 

    Was ich als zusätzliche Daten erwarte:

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

    Was bekomme ich als zusätzliche Daten:

     "debug": false 

    Wenn ich {"debug": false "title": "Application update!"} Als extra daten dann bekomme ich {"debug": false "title": "Application update!"} Als extra daten (mit dem fehlenden komma) . Also nehme ich an, dass es etwas mit Brace-Erweiterung von meinem bash zu tun hat, aber es ausschaltet, löst das Problem nicht und entkommt den Klammern oder das Komma funktioniert nicht.

    Hat jemand eine Ahnung, was mache ich falsch?

  • Intent.migrateExtraStreamToClipData () auf eine Nullobjektreferenz
  • Wie bekomme ich Google Play-Spiele ID mit dem neuen aktualisierten Google Play-Spiele Gamer ID?
  • Hochladen einer großen Datei in Multipart mit OkHttp
  • Mörtel + Flow mit Drittbibliotheken, die zum Aktivitätslebenszyklus gehakt wurden
  • Ressourcen & Frameworks für mobile Entwicklung (iPhone, Android) mit HTML5
  • AutoFocus werfende ausnahme
  • 3 Solutions collect form web for “Das Senden von JSON als zusätzliche Daten in einer Android-Übertragung über ADB wird falsch formatiert”

    Ihr Workaround war eine große Hilfe!

    Es zeigt an, dass das Problem bei der Zitierung durch zwei Shells (Host plus Android) ist. Shell zitiert ist ein schreckliches tarpit aber es gibt ernstes extra weirdness hier

    Nach dem Experimentieren mit "Echo" -Befehlen, fand ich, dass das Argument der Adb-Shell als einziges Argument an die lokale Shell zitiert werden muss und die JSON-Payload als einziges Argument für die Android-Shell zitiert werden muss.

    Hier ist eine allgemeine Lösung (und es braucht nicht zu spritzen \ -Zitate von " , ! , { , Und } Zeichen im JSON-Text):

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

    Muster: adb shell "am broadcast ... '"'JSON_TEXT'"'"

    Das innere Paar von Markierungen zitiert das JSON_TEXT lokal, während das äußere Paar es fernweise zitiert. Das äußere Paar ist wiederum " -quotiert.

    Ok, ich habe gerade eine Lösung gefunden. Ich muss zuerst die Geräte-Shell über die adb shell eingeben und dann die am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver --es "notify" '{"debug": false, "title": "Application update!"}' ausführen am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver --es "notify" '{"debug": false, "title": "Application update!"}'

    Ich weiß, das ist ein alter Posten, aber ich habe einige Gedanken.

    Nach dem Kampf um Daten durch cmd und bash args oder subprocess im Programm zu übergeben, fand ich use base64 zu kodieren json gedumpten Daten ist extrem bequem, nur base64 decodieren und dann json Lasten, keine Sorge über Zitat, Raum, Tab, alles.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.