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
Eh bien, vous devez exécuter quelques commandes, car je ne pense pas que cela fonctionnera dans une seule.
Vous devez faire:
-
shell adb
-
su
-
cd / data / path / of / file
-
cp / data / path / of / file / copyme / data / local / tmp
-
chown shell.shell / data / local / tmp / copyme
-
exit
-
exit
-
adb pull / data / local / tmp / copyme / destination / copyme
Cela fonctionne pour moi à chaque fois.
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
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%
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.
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é>