Transfert de données binaires sur shell ADB (c.-à-d. Transfert rapide de fichiers à l'aide de goudron)

J'ai essayé de déplacer des fichiers de mon appareil Android vers ma machine adb shell tar -c directory_to_copy | tar -x utilisant quelque chose de similaire à: adb shell tar -c directory_to_copy | tar -x adb shell tar -c directory_to_copy | tar -x . Il semblerait que la barre à distance fonctionne, mais quelque part sur la façon dont le fichier est corrompu. Après avoir joué autour, j'ai trouvé:

Je suppose que le démon fait ce type de traduction dans la commande shell pour les utilisateurs de Windows.

Mes questions sont les suivantes:

  1. Wtf? (Qu'est-ce que c'est et pour quel but?)
  2. Est-il possible de le dire (adbd?) De ne pas faire ça?
  3. Est-ce que quelqu'un peut penser à toute façon créative de contourner cela (j'ai pensé à base de 64 codage des données, mais je préférerais éviter ces frais généraux. De plus, créer un fichier local n'est pas une option puisque mon système de fichiers est assez complet)

Merci!

3 Solutions collect form web for “Transfert de données binaires sur shell ADB (c.-à-d. Transfert rapide de fichiers à l'aide de goudron)”

Adb ne fait pas cela à dessein, mais ce n'est pas assez intelligent pour s'abstenir d'attribuer un terminal lorsque vous lui donnez une commande à exécuter; Le terminal sur le côté Android est ce qui cuisine les octets. Au lieu de

 adb shell 'cd /mnt/sdcard;cat a.bin' | hexdump -C 

Essayez de faire

 adb shell 'stty raw; cd /mnt/sdcard;cat a.bin' | hexdump -C 

Cela indique au périphérique terminal de ne pas mangote les octets du tout, mais de les transmettre.

Utilisez adb exec-out <command> au lieu du adb shell .

Exemple de adb exec-out cat /data/myfile.txt > localfile.txt

Le "stty" truc mentionné dans la première réponse ne fonctionne pas en général.

Pour faire passer la sortie à la commande hexdump du côté hôte, cela pourrait être correct. Cependant, pour le tar (comme mentionné dans le sujet de la question initiale) et pour de nombreuses autres commandes qui peuvent accepter l'entrée de flux binaire, cela ne fonctionne pas. Comme Fabian Zeindl l'a souligné correctement, utiliser 'adb exec-out …' est le bon chemin à parcourir.

Quelques exemples pour transférer la sortie de tar sur ADB:

  1. Ici, on suppose que l'exécutable tar est trouvé dans votre chemin sur Android:

    • adb exec-out 'cd /sdcard; tar -cf - DCIM/' > DCIM.tar
    • adb exec-out 'cd /sdcard; tar -cf - DCIM/' | tar -tvf -
  2. Des exemples plus complexes impliquant la compression et l'utilisation de busybox:

    • adb exec-out 'cd /sdcard; /system/xbin/extras/busybox tar -czf - DCIM/' > DCIM.tgz
    • adb exec-out 'cd /sdcard; GZIP="-9" /system/xbin/extras/busybox tar -czf - DCIM/' | tar -tvzf -
    • adb exec-out 'cd /sdcard; BGZIP2="-9" /system/xbin/extras/busybox tar -cjf - DCIM/' > DCIM.tar.bz2
coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.