J'ai créé un script pour monter des partitions et effectuer des tâches dans mon système Android. J'ai enregistré le script sous le nom install.sh dans le dossier/bin d'Android.
Je souhaite appeler le script à partir d'ADB, qui est lui-même appelé à partir d'un fichier de commandes sous Windows, mais il doit être exécuté en tant que root.
La première solution que j'ai essayée était d'appeler le script en utilisant
adb Shell "su -c sh /bin/script.sh"
mais cela ne fonctionne pas car il me donne un accès Shell (avec les droits root), mais rien n’est exécuté . J'ai aussi essayé d’appeler
adb root "sh /bin/script.sh"
mais j'ai eu l'erreur suivante
adbd cannot run as root in production builds
J'ai alors essayé d'écrire
su -c "command"
pour toutes les commandes qui nécessitent un accès root dans mon script, mais j'ai le même problème. Lorsque j'exécute le script, je n'obtiens qu'un shell racine et rien n'est exécuté.
Si j'utilise la première solution manuellement (par exemple, j'appelle adb Shell su, puis mon script), cela fonctionne. Cependant, le but est d'automatiser le processus, de sorte que le shell adb puisse être appelé à partir d'un autre script.
Avez-vous une idée de comment je pourrais y arriver?
Merci !
Cela fonctionne pour moi:
Créez myscript.bat et mettez-le dedans (notez les guillemets simples autour des commandes à exécuter en mode superutilisateur):
adb Shell "su -c 'command1; command2; command3'"
puis exécutez myscript.bat à partir d'un shell DOS.
Remarque: il ne semble pas que le caractère de continuation de ligne DOS (^) fonctionne dans cette situation. En d'autres termes, ce qui suit ne fonctionne pas pour moi:
adb Shell "su -c '^
command1; ^
command2; ^
command3'"
Cela se traduit par "Erreur de syntaxe: chaîne entre guillemets non terminée"
Cela marche :
adb Shell echo command which needs root privileges \| su
Si vous avez besoin d'une redirection:
adb Shell echo 'echo anytext > /data/data/aforbiddenfolder/file' \| su
Pour "copier" un fichier local sur un chemin Android nécessitant des privilèges root (mais alocalfile ne doit pas contient '
):
cat alocalfile | adb Shell echo "echo '`cat`' > /data/data/aforbiddenfolder/file" \| su
Si vous avez un meilleur moyen (même pour les versions su
qui n'ont pas -c
), je suis intéressé.
Cela fonctionne pour moi:
adb Shell "su -c ./data/local/tcpdump-arm -s 0 -v -w /data/local/appxpress_dump.pcap"
mais cela ne fonctionne pas car cela me donne un accès Shell (avec les permissions root), mais rien n'est exécuté.
Comment savez-vous que vous disposez d'autorisations root? Je suppose que vous essayez d'exécuter le script sur un périphérique? Votre appareil a-t-il été enraciné?
Vous devrez peut-être donner des autorisations d'exécution via chmod au fichier.
chmod ugo=rwx /bin/script.sh
Il semble que j'utilisais une version très simple de su qui n'acceptait pas l'argument -c. J'ai copié un autre su qui a fonctionné. AndyD a tout à fait raison, alors j'accepte sa réponse à la place de la mienne :)
Je ne sais pas si j'ai fourni une solution ou demandé une meilleure. Je voulais exécuter 200 commandes en mode batch à envoyer à adb J'ai suivi cette approche.
adb Shell "su -c command ; "
adb Shell "su -c command ; "
adb Shell "su -c command ; "
adb Shell "su -c command ; "
et je les ai sauvegardés dans un fichier batch
Cette commande
adb Shell "su -c 'command1; command2; command3'"
ne fonctionnera pas au-delà d'une certaine taille maximale. Cela n'a pas fonctionné
error: service name too long