Question:
Besoin d'un shell adb en une ligne su push & pull pour accéder / données à partir du fichier de commandes Windows
sjoy
2014-10-23 10:05:01 UTC
view on stackexchange narkive permalink

Je me bats depuis deux jours. J'espère avoir de l'aide ici.

J'ai écrit un fichier de commandes Windows qui remplace les publicités sur l'écran de verrouillage d'Amazon par des images d'utilisateurs sur rooté kindle fire hd 7 ", 2013 (kfsowi). Je viens d'apprendre que j'ai bâclé les commandes adb parce que j'exécutais "adb insecure" et que j'obtenais l'accès su sans l'écrire dans les commandes adb.

Ce dont j'ai besoin: Pour exécuter dans un fichier batch, j'ai besoin commandes adb shell su d'une ligne à extraire de / pousser vers / data sur cet appareil. (Ou je pourrais utiliser -> adb -d shell su -c "mount -o remount rw, / data < - sur une ligne suivie du pull ou du push)

J'ai corrigé une commande ls comme celle-ci:

  • cela fonctionnait avec adb non sécurisé: adb ls "/ data / secureStorageLocation "
  • ce dont j'avais besoin était: adb shell su -c" ls ./data/securedStorageLocation"

Maintenant, j'ai besoin de la même chose pour tirer et pousser. Le problème:
- Avec adb non sécurisé, cela fonctionne très bien: adb pull "/ data / secureStorageLocation" "C: / destination"
- Sans adb non sécurisé, j'obtiens: remote l'objet '/ data / secureStorageLocation /' n'existe pas

Ci-dessus se produit même si j'exécute d'abord: adb -d shell su -c "mount -o remount rw, / data

Quelqu'un peut-il me dire comment faire le pull and push avec adb shell et su. J'ai essayé BEAUCOUP de permutations et je n'arrive pas à comprendre. Merci pour votre temps.

EDIT: commande adb root ne prend pas racine sur cet appareil

Pour utiliser `adb push` ou` adb pull` en mode root, le démon adb sur le périphérique doit être exécuté en mode root (ce que fait ADBInsecure).
@Izzy Comment puis-je entrer en mode root sans adb non sécurisé si la commande> adb root
Je ne sais pas (toujours utilisé "ADB Insecure", car je ne pouvais pas non plus faire fonctionner `adb root`). Vaut peut-être une question distincte?
Cinq réponses:
Mike N.
2015-11-23 13:28:24 UTC
view on stackexchange narkive permalink

Eh bien, vous devez exécuter quelques commandes, car je ne pense pas que cela fonctionnera dans une seule.

Vous devez faire:

  1. shell adb
  2. su
  3. cd / data / path / of / file
  4. cp / data / path / of / file / copyme / data / local / tmp
  5. chown shell.shell / data / local / tmp / copyme
  6. exit
  7. exit
  8. adb pull / data / local / tmp / copyme / destination / copyme

Cela fonctionne pour moi à chaque fois.

qu'est-ce que shell.shell exactement
@Remario https: // linux.die.net / man / 1 / chown - cela signifie owner.group.Lorsque vous copiez un fichier à l'aide de SU, le propriétaire et le groupe seront root.root.La commande adb pull s'exécute en tant que shell.shell et ne pourra pas extraire le fichier de l'emplacement temporaire.Le changer avant de faire pull vous autorisera.
Jim Klimov
2017-03-21 18:39:08 UTC
view on stackexchange narkive permalink

Merci pour cette discussion. Cela m'a conduit à une solution qui fonctionnait assez bien pour moi lors de la sauvegarde de mon téléphone qui ne montera pas son ext4 interne, avant de faire quelque chose de drastique en essayant de le réparer (apparemment, cela nécessite des autorisations root).

Notez que adb shell configure généralement un terminal texte (il peut donc convertir des caractères de fin de ligne uniques en CRLF, en manipulant des données binaires comme des images de partition ou des archives TAR). Bien que vous puissiez contourner ce problème dans les versions Unix / Linux d'adb (par exemple, ajoutez stty raw à votre commande shelled) ou utilisez un adb plus récent avec l'option exec-out , sous Windows il écrit toujours CRLF dans sa sortie. L'astuce consiste à faire passer les données via l'encodage et le décodage base64 (les binaires sont disponibles pour Windows en masse). Notez également que les erreurs ou les messages détaillés imprimés sur stderr dans le shell se retrouvent sur stdout du programme adb shell dans le système hôte - vous voulez donc jetez-les après une inévitable expérimentation initiale.

Voici:

  adb shell "su -c 'cat / dev / block / mmcblk0p25 | base64' 2> / dev / null" | base64 -d > p25  

Peut être facilement scripté par Windows pour couvrir toutes les partitions (peut consulter la liste par ls -la / dev / block / et / ou par cat / proc / diskstats ou cat / proc / partitions ), par exemple:

  pour / L% P in (1 , 1,25) do .. \ platform-tools \ adb shell "su -c 'cat / dev / block / mmcblk0p% P | base64' 2> / dev / null" | base64 -d > s3-mmcblk0p% P.img  

(Remarque pour utiliser %% P dans les fichiers batch CMD, ou % P dans le shell interactif).

N'oubliez pas qu'il existe également des partitions mmcblk0boot [01] , et que le mmcblk0 contient globalement toutes ces partitions dans un wrapping GPT, comme tout autre disque dur ou imitateur d'un seul :)

Pour estimer les tailles de partition individuelles, vous pouvez consulter la sortie de:

  fdisk -u -l / dev / block / mmcblk0 *  

Malheureusement, je n'ai pas réussi à tar cf - mmcblkp0 * code rapidement et facilement > et obtenir le contenu de la partition, afin que je puisse le diriger vers par exemple 7z x -si et récupérez également les données sous forme de fichiers multiples dans une seule ligne portable.

Pour tar certains fichiers, vous pouvez:

  adb shell "su -c 'cd / mnt / data && tar czf - ./ | base64' 2> / dev / null" | base64 -d > s3-mmcblk0p25-userdata.tar.gz  

MISE À JOUR: Nous avons trouvé d'autres astuces pour transférer des données binaires.

J'espère que cela aidera quelqu'un d'autre, Jim Klimov

base64 n'est pas une solution idéale.Pour les petits fichiers, cela fonctionne bien mais pour les gros fichiers, cela augmente le temps de transfert d'un tiers!
Bien sûr, ce n'est pas parfait à cause de cela, mais étant donné qu'à des fins de récupération, saisir toutes les pailles qui peuvent aider est assez bon ... eh bien ... :) En tout cas, si j'envoie une partition entière pour l'exportation comme celle-ci,Je ne me soucie pas vraiment si cela prend une heure contre une heure et demie, tant que cela fait le travail de manière fiable.De plus, si, comme certains autres l'ont documenté, la variante Windows de adb.exe génère toujours du texte séparé par CRLF, il semble que nous ne puissions pas faire grand-chose d'autre que d'en abuser avec une incapsulation compatible ASCII.Alternativement, `adb exec-out` pourrait être la solution - mais pour une raison quelconque, cela n'a pas bien fonctionné pour moi.
Nae
2019-02-27 17:46:49 UTC
view on stackexchange narkive permalink

J'utilise le script batch ( extract-db-from-emulator.bat ) ci-dessous pour extraire la base de données locale vers l'hôte:

  @@ echo offSET adb_path = "% USERPROFILE% \ AppData \ Local \ Android \ sdk \ platform-tools \" SET application_id = "com.example.myapp" SET root_access_filepath = "/ data / user / 0 /% application_id% / databases / local.db "SET pullable_filepath =" / mnt / sdcard / DCIM / local.db "SET host_directory ="% USERPROFILE% \ Desktop "SET root_command =" su 0 cp "% adb_path% adb.exe shell"% root_command%% root_access_filepath%% pullable_filepath % "% adb_path% adb.exe pull% pullable_filepath%% host_directory%  
Display Name
2015-06-09 12:05:25 UTC
view on stackexchange narkive permalink

Ce ne sera pas nécessairement une ligne, mais vous pouvez essayer d'effectuer les actions suivantes:

  • (avec adb shell, su) Copiez les fichiers dans un emplacement temporairement accessible sur votre appareil (par exemple, / sdcard , ou une carte SD externe)
  • (avec adb pull) Copiez ces fichiers de l'emplacement temporaire sur votre machine
  • Supprimer temporaire copier

Inconvénient possible: entre la première et la dernière étape, une application malveillante, si vous l'utilisez, peut lire et / ou modifier des fichiers dans un répertoire temporaire accessible au public. En pratique, c'est très peu probable.

hannes ach
2020-05-10 12:46:58 UTC
view on stackexchange narkive permalink

Je vois une erreur avec

  adb shell "su -c '<your command>'"  

su: invalid uid / gid ' -c '

La solution est sous Linux

  adb shell su 0' <your command> '  pré>


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...