Recherche…


Introduction

adb shell ouvre un shell Linux dans un périphérique ou un émulateur cible. C'est le moyen le plus puissant et le plus polyvalent de contrôler un appareil Android via adb .

Ce sujet a été séparé d' ADB (Android Debug Bridge) en raison de la limite des exemples, dont beaucoup impliquaient la commande adb shell .

Syntaxe

  • shell adb [-e échapper] [-n] [-Tt] [-x] [commande]

Paramètres

Paramètre Détails
-e choisissez le caractère d'échappement, ou "aucun"; par défaut '~'
-n ne lis pas de stdin
-T désactiver l'allocation PTY
-t forcer l'allocation PTY
-X désactiver les codes de sortie distants et la séparation stdout / stderr

Envoyer du texte, des touches enfoncées et des événements tactiles au périphérique Android via ADB

exécuter la commande suivante pour insérer le texte dans une vue avec un focus (s'il prend en charge la saisie de texte)

6,0

Envoyer du texte sur le SDK 23+

adb shell "input keyboard text 'Paste text on Android Device'"

Si déjà connecté à votre appareil via adb :

input text 'Paste text on Android Device'
6,0

Envoyer du texte avant le SDK 23

adb shell "input keyboard text 'Paste%stext%son%sAndroid%sDevice'"

Les espaces ne sont pas acceptés comme entrée, remplacez-les par% s.

Envoyer des événements

Pour simuler une pression sur la touche d'alimentation matérielle

adb shell input keyevent 26

Ou bien

adb shell input keyevent POWER

Même si vous n'avez pas de clé matérielle, vous pouvez toujours utiliser un keyevent pour effectuer l'action équivalente

adb shell input keyevent CAMERA

Envoyer un événement tactile en entrée

adb shell input tap Xpoint Ypoint

Envoyer un événement swipe en entrée

adb shell input swipe Xpoint1 Ypoint1 Xpoint2 Ypoint2 [DURATION*]

* DURÉE est facultative, par défaut = 300ms. la source

Obtenez des points X et Y en activant l'emplacement du pointeur dans l'option développeur.

Exemple de script shell ADB

Pour exécuter un script dans Ubuntu, créez un script.sh avec le bouton droit de la souris sur le fichier et ajoutez une autorisation en lecture / écriture et cochez autoriser l'exécution du fichier en tant que programme .

Ouvrez l'émulateur de terminal et exécutez la commande ./script.sh

Script.sh

 for (( c=1; c<=5; c++ ))
    do  
       adb shell input tap X Y
       echo "Clicked $c times"
       sleep 5s
    done

Pour une liste complète des numéros d'événement

Liste des paquets

Imprime tous les paquets, éventuellement uniquement ceux dont le nom du paquet contient le texte dans <FILTER>.

adb shell pm list packages [options] <FILTER>

All <FILTER>

adb shell pm list packages

Les attributs:

-f pour voir leur fichier associé.

-i Voir l'installateur pour les paquets.

-u pour inclure également les paquets désinstallés.

-u Inclure également les paquets désinstallés.

Attributs qui filtrent:

-d pour les paquets désactivés.

-e pour les paquets activés.

-s pour les packages système.

-3 pour les packages tiers.

--user <USER_ID> pour un espace utilisateur spécifique à interroger.

Octroi & révocation d'autorisations API 23+

Un one-liner qui aide à accorder ou à révoquer des autorisations vulnérables.

  • octroi

    adb shell pm grant <sample.package.id> android.permission.<PERMISSION_NAME>
    
  • révoquer

    adb shell pm revoke <sample.package.id> android.permission.<PERMISSION_NAME>
    
  • Accorder toutes les autorisations d'exécution à la fois sur l'installation (-g)

    adb install -g /path/to/sample_package.apk
    

Imprimer les données d'application

Cette commande imprime toutes les données d'application pertinentes:

  • code de version
  • nom de la version
  • autorisations accordées (Android API 23+)
  • etc..
adb shell dumpsys package <your.package.id>

Enregistrement de l'affichage

4.4

Enregistrement de l'affichage des appareils fonctionnant sous Android 4.4 (API niveau 19) et supérieur:

adb shell screenrecord [options] <filename>
adb shell screenrecord /sdcard/demo.mp4

(appuyez sur Ctrl-C pour arrêter l'enregistrement)

Téléchargez le fichier depuis l'appareil:

adb pull /sdcard/demo.mp4

Remarque: Arrêtez l'enregistrement d'écran en appuyant sur Ctrl-C, sinon l'enregistrement s'arrête automatiquement à trois minutes ou à la limite de temps définie par --time-limit .

adb shell screenrecord --size <WIDTHxHEIGHT>

Règle la taille de la vidéo: 1280x720. La valeur par défaut est la résolution d'affichage native du périphérique (si elle est prise en charge), sinon 1280x720. Pour de meilleurs résultats, utilisez une taille prise en charge par l'encodeur AVC (Advanced Video Coding) de votre appareil.


adb shell screenrecord --bit-rate <RATE>

Définit le débit binaire vidéo pour la vidéo, en mégabits par seconde. La valeur par défaut est 4 Mbps. Vous pouvez augmenter le débit binaire pour améliorer la qualité vidéo, mais cela entraîne des fichiers vidéo plus volumineux. L'exemple suivant définit le débit binaire d'enregistrement sur 5 Mbits / s:

adb shell screenrecord --bit-rate 5000000 /sdcard/demo.mp4

adb shell screenrecord --time-limit <TIME>

Définit la durée d'enregistrement maximale, en secondes. La valeur par défaut et maximale est 180 (3 minutes).


adb shell screenrecord --rotate

Fait pivoter la sortie de 90 degrés. Cette fonctionnalité est expérimentale.


adb shell screenrecord --verbose

Affiche les informations du journal sur l'écran de la ligne de commande. Si vous ne définissez pas cette option, l'utilitaire n'affiche aucune information pendant l'exécution.

Remarque: Cela peut ne pas fonctionner sur certains appareils.

4.4

La commande d'enregistrement d'écran n'est pas compatible avec les versions Android pré 4.4

La commande screenrecord est un utilitaire shell permettant d'enregistrer l'affichage des périphériques exécutant Android 4.4 (niveau 19 de l'API) et supérieur. L'utilitaire enregistre l'activité de l'écran dans un fichier MPEG-4.

Modification des autorisations de fichier à l'aide de la commande chmod

Notez que pour changer les prmissions de fichiers, votre périphérique doit être rooté, su binary ne vient pas avec les périphériques livrés en usine!

Convention:

adb shell su -c "chmod <numeric-permisson> <file>"

Autorisation numérique construite à partir de sections utilisateur, groupe et monde.

Par exemple, si vous souhaitez modifier le fichier pour qu'il soit lisible, accessible en écriture et exécutable par tous, ce sera votre commande:

adb shell su -c "chmod 777 <file-path>"

Ou

adb shell su -c "chmod 000 <file-path>"

si vous avez l'intention de lui refuser des autorisations.

1er chiffre - spécifie la permission de l'utilisateur, 2e chiffre - spécifie l'autorisation de groupe, 3e chiffre - spécifie la permission du monde (autres).

Autorisations d'accès:

--- :   binary value:   000,  octal value: 0 (none)
--x :   binary value:   001,  octal value: 1 (execute)
-w- :   binary value:   010,  octal value: 2 (write)
-wx :   binary value:   011,  octal value: 3 (write, execute)
r-- :   binary value:   100,  octal value: 4 (read)
r-x :   binary value:   101,  octal value: 5 (read, execute)
rw- :   binary value:   110,  octal value: 6 (read, write)
rwx :   binary value:   111,  octal value: 7 (read, write, execute)

Définir la date / heure via adb

6,0

Le format SET par défaut est MMDDhhmm[[CC]YY][.ss] , c'est-à-dire (2 chiffres chacun)

Par exemple, pour définir le 17 juillet à 10h10, sans modifier l'année en cours, tapez:

adb shell 'date 07171010.00'

Astuce 1: le changement de date ne sera pas répercuté immédiatement, et un changement notable ne se produira qu'une fois que l'horloge du système passera à la minute suivante.
Vous pouvez forcer une mise à jour en attachant une TIME_SET intention TIME_SET à votre appel, comme ceci:

adb shell 'date 07171010.00 ; am broadcast -a android.intent.action.TIME_SET'

Astuce 2: synchroniser l'horloge d'Android avec votre machine locale:

Linux:

adb shell date `date +%m%d%H%M%G.%S`

Windows (PowerShell):

$currentDate = Get-Date -Format "MMddHHmmyyyy.ss" # Android's preferred format
adb shell "date $currentDate"

Les deux conseils ensemble:

adb shell 'date `date +%m%d%H%M%G.%S` ; am broadcast -a android.intent.action.TIME_SET'
6,0

Le format SET par défaut est 'AAAAMMJJ.HHmmss'

adb shell 'date -s 20160117.095930'

Astuce: pour synchroniser l'horloge d'Android avec votre ordinateur local (basé sur Linux):

adb shell date -s `date +%G%m%d.%H%M%S`

Ouvrir les options du développeur

adb shell am start -n com.android.settings/.DevelopmentSettings

Navigation dans votre appareil / émulateur vers la section Developer Options du Developer Options .

Génération d'une diffusion "Boot Complete"

Ceci est pertinent pour les applications qui implémentent un BootListener . Testez votre application en tuant votre application, puis testez avec:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n your.app/your.app.BootListener

(remplacez votre your.package/your.app.BootListener par des valeurs correctes).

Afficher le contenu de stockage externe / secondaire

Afficher le contenu:

adb shell ls \$EXTERNAL_STORAGE
adb shell ls \$SECONDARY_STORAGE

Chemin de vue:

adb shell echo \$EXTERNAL_STORAGE
adb shell echo \$SECONDARY_STORAGE

tuer un processus dans un appareil Android

Parfois, le logcat d'Android s'exécute à l'infini avec des erreurs provenant de certains processus que vous ne possédez pas, en vidant la batterie ou en rendant difficile le débogage de votre code.

Un moyen pratique de résoudre le problème sans redémarrer le périphérique consiste à localiser et à supprimer le processus à l'origine du problème.

De Logcat

03-10 11:41:40.010 1550-1627/? E/SomeProcess: ....

remarquez le numéro de processus: 1550

Maintenant, nous pouvons ouvrir un shell et tuer le processus. Notez que nous ne pouvons pas tuer root processus root .

adb shell

à l'intérieur de la coquille, nous pouvons vérifier plus sur le processus en utilisant

ps -x | grep 1550

et tue le si on veut:

kill -9 1550


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow