Comment obtenir un accès root sur l'émulateur Android?

146

J'ai toutes les versions du SDK Android (de 1.5 à 2.3.3) et j'ai essayé de nombreuses méthodes pour obtenir la racine dans l'émulateur Android. Je n'utilise aucun appareil Android et je teste tout sur l'émulateur (AVD).

Je dois obtenir un accès root dans l'un des émulateurs Android pour utiliser les fonctionnalités «iptables» et «busybox». Et pour utiliser iptables, je dois avoir un accès root. Au moins la commande «su» doit s'exécuter dans l'émulateur de terminal.

J'ai également installé l' z4rootapplication,

Mais cela prend très longtemps et ne termine pas l'enracinement et reste bloqué. certains disent que si nous rétrogradons le système en dessous de RC30, nous pouvons ainsi obtenir un accès root. si cela est vrai, comment faire cela? J'utilise les systèmes d'exploitation Linux et Windows.

S'il vous plaît, quelqu'un me dit une méthode pour rooter mon émulateur.

Prétam
la source
Je pense que vous pouvez utiliser "Root.apk" stocké sur filecrop (VISIONary dans le système Android) pour rooter l'émulateur car, à chaque redémarrage, il roote le système. Z4root ne peut pas fonctionner car il a besoin d'un redémarrage pour que l'accès root fonctionne.Désolé pour le mauvais anglais, je suis français.
JeremLeOuf
Où puis-je obtenir cela? Existe-t-il un manuel pour cela?
développeur android
6
Veuillez noter que les émulateurs Android sont déjà "rootés". Vous n'avez rien à faire pour obtenir un shell adb root, car il s'exécute déjà en tant que root par défaut. Ce qui est discuté ici est l'installation d'un "su" piraté ou d'un shim similaire pour permettre au code d'application de lancer des programmes d'aide qui s'exécutent en tant que root.
Chris Stratton
2
Utiliser Genymotion genymotion.com Il est très rapide et a root par défaut.
klimat
1
vous avez installé la mauvaise image. voir ici -> stackoverflow.com/questions/43923996/…
wwwwwwwwwwww

Réponses:

136

Ces réponses sont toutes inutilement compliquées :)

$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #
JRaymond
la source
52
L'exécution adb rootentraîne "adbd ne peut pas s'exécuter en tant que root dans les versions de production". Utilisez-vous un émulateur particulier? Veuillez fournir plus de détails.
orodbhen
3
Vous ne pouvez utiliser cette racine pour aucune application.
Enyby le
5
Si quelqu'un essaie de faire fonctionner cela sur les nouvelles images système de Google Play, adbd est configuré pour être sécurisé dans ramdisk.img. J'ai pu contourner ce problème en utilisant ramdisk.img à partir de l'image des API Google. J'ai testé sur les images 7.0 et 8.0.
tstaylor7
47
Si adb rootdonne l'erreur adbd cannot run as root in production builds, voir stackoverflow.com/a/45668555/1682419 - Vous avez besoin d'une "image système des API Google" plutôt que d'une "image système Google Play".
Jerry101
10
@JRaymond J'ai tapé adb root mais rien n'est imprimé après cela
75

Comment rooter l'émulateur Android (testé sur Android 7.1.1 / Nougat)

Exigences :

Instructions

  1. Installez le SuperSu.apk

    • Installez d'abord l'application SuperSu, faites simplement un glisser-déposer (si vous exécutez la dernière version de l'émulateur ou sideload via adb ie adb -e install supersu.apk)

    • Après l'avoir installé, lorsque vous l'exécutez, il affiche un écran comme indiqué ci-dessous indiquant «Il n'y a pas de binaire SU installé ..». Cette erreur confirme simplement que l'appareil n'est pas encore rooté.

entrez la description de l'image ici


  1. Rendre la partition système de l'émulateur accessible en écriture

    • Comme il le suggère, nous devons donner à l'émulateur la permission d'écrire des fichiers système.

    • Tapez le code suivant pour accomplir cela: emulator -avd {emulator_name} -writable-system

Si vous avez plusieurs AVD, vous pouvez obtenir une liste de fichiers avds en utilisant la commande: emulator -list-avds

Remarque: accédez au dossier des outils où le SDK Android est installé et ouvrez-y l'invite de commande en appuyant sur Maj et en cliquant avec le bouton droit.


  1. Pousser su binaire dans le répertoire système

    • Extraire le fichier Recovery flashable.zip (contenant les sous binaires de différentes architectures)

Important! N'utilisez que le binaire su qui correspond à votre architecture avd par exemple x86, arm etc., et notez le chemin où vous avez extrait ces binaires.

  • Assurez-vous que vous exécutez adb en tant que root et que vous devez également le remonter. Entrez simplement ces codes

adb root

adb remount

Maintenant, il est temps de pousser le binaire su:

Voici le code que j'ai utilisé avec succès :adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su

(peu importe mon emplacement spécifique du binaire su, n'importe quel emplacement est correct tant qu'il n'y a pas d'espace blanc)

Remarque: Pour comprendre binou xbinfaire dans la console avant:> adb shell,>ls /system/xbin/su

Si cela échoue, essayez plutôt de pousser vers ce répertoire /system/xbin/su. Aussi pour les émulateurs exécutant Android 5.1 et les versions antérieures, utilisez suet nonsu.pie


  1. Modifier les autorisations du binaire su

    • Faisons ensuite un peu de modification des permissions de su binary. Nous devons le faire dans un appareil émulateur via adb:

    adb -e shell su root cd /system/bin chmod 06755 su

Important!! Prenez note du chemin binaire su (le mien est / system / bin)


  1. Définir la installdirective sur su binaire et définir undaemon

Tapez les codes:

su --install

et pour configurer le démon:

su --daemon&

Important!! Prenez note de l'espacement


  1. Définition de SELinux sur Permissive (c.-à-d. Désactivation de SE Linux)

    • Enfin, désactivez selinux via ce code:

setenforce 0


  1. Ouvrez l'application SuperSU et il peut demander de mettre à jour les binaires, vous pouvez utiliser la méthode normale.

Remarque: Si vous rencontrez des boucles de démarrage, ne mettez pas à jour les binaires, utilisez-les simplement tels quels.


C'est à peu près tout !!

Ouvrez n'importe quelle application nécessitant des autorisations SU juste pour vérifier et en fait SuperSU demandez si vous souhaitez lui accorder des autorisations su.

entrez la description de l'image ici

Pour que la racine persiste, mettez à jour le binaire su (en utilisant la méthode normale), copiez alors system.img du répertoire temporaire ( Users\AppData\Local\Temp\Android Emulatorle fichier est généralement nommé aléatoirement, par exemple 1359g.tmpavec une grande taille) et remplacez default system.img.

Mise à jour :

J'ai noté qu'il est plus facile d'obtenir une image système temporaire sous Linux que Windows. Vous pouvez essayer d'utiliser une image instantanée.

Mise à jour du 4 août 2018

Avec l'émergence de l'émulateur, 27.3.xil est désormais beaucoup plus facile de préserver la racine grâce à la fonction de capture instantanée (si la copie de la system.imgméthode ne fonctionne pas):

Idéalement, cela ressemble plus à une mise en veille prolongée du périphérique virtuel avec une configuration intacte, donc tout est préservé.

Instantanés

Vous pouvez maintenant enregistrer plusieurs instantanés AVD pour une configuration de périphérique donnée et choisir lequel des instantanés enregistrés à charger lorsque vous démarrez l'émulateur. Démarrer un appareil virtuel en chargeant un instantané est un peu comme réveiller un physique à partir d'un état de veille, par opposition au démarrage à partir d'un état hors tension.

Cela implique que la seule exigence pour démarrer l'émulateur est d'ajouter le -writable-systemparamètre à la emulator -avd [avdname]commande normale pour démarrer l'émulateur. (L' exécution de l'émulateur uniquement avec emulator -avd [avdname]ne lance pas la version / copie enracinée ou peut entraîner une erreur )

Testé au niveau API 22

Pour les problèmes de bootloop, consultez également l'autre article: Android Emulator: Comment éviter une boucle de démarrage après l'enracinement? et leurs mises à jour.

Remarques

La plupart du contenu en référence concernait les anciennes versions d'Android et donc la raison des différentes commandes et chemins que j'ai modifiés.

Remerciements;

xavier_fakerat
la source
1
note: pour comprendre bin ou xbin, faites dans la console avant:> adb shell,> ls / system / xbin / su
djdance
1
@xavier_fakerat oui, j'ai arrêté de mettre à jour les binaires. Le problème est qu'après chaque redémarrage, je dois remonter la machine et exécuter le su --install && su --daemon&sur l'émulateur, suivi de setenforce 0pour obtenir la racine. Connaissez-vous un correctif permanent pour la racine au redémarrage?
Cristian Holdunu
1
Agréable! Cette méthode fonctionne également pour de vrais appareils auxquels vous pouvez accéder à root via adb.
Mygod
1
Vous m'avez répondu, pourquoi l'émulateur Android se ferme de manière inattendue après l'enracinement de l'image lorsque vous n'utilisez pas -writable-system. C'est parce que les instantanés.
Rodrirokr
1
J'utilise le Pixel 2 XL: les gens semblent avoir le même problème avec le Pixel XL: forum.xda-developers.com/pixel-xl/how-to
...
33

Voici la liste des commandes que vous devez exécuter pendant que l'émulateur est en cours d'exécution, je teste cette solution pour un avd sur Android 2.2:

adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system  
adb push su /system/xbin/su  
adb shell chmod 06755 /system  
adb shell chmod 06755 /system/xbin/su

Il suppose que le binaire su se trouve dans le répertoire de travail. Vous pouvez trouver su et superuser ici: http://forum.xda-developers.com/showthread.php?t=682828 . Vous devez exécuter ces commandes chaque fois que vous lancez l'émulateur. Vous pouvez écrire un script qui lance l'émulateur et le roote.

abd
la source
15
Veuillez inclure les parties pertinentes de votre article de blog ici. SO est un lieu de réponses, pas de liens.
cHao
2
Aucun fichier ou répertoire de ce type 'SU'
Mahendran
4
Cela ne fonctionne pas sur l'émulateur 2.2, 2.3 ou 2.3.3 Je reçois seulement des erreurs pour adb push: mémoire insuffisante, dir n'est pas vide, etc.
Pointer Null
2
@mice: Comme l'erreur l'indique, vous ne pouvez pas pousser le binaire car il n'y a pas assez d'espace sur le périphérique virtuel. Lors du lancement de l'émulateur, vous pouvez ajouter l' -partition-sizeoption pour spécifier la taille de la partition. Essayez de lancer votre émulateur avectools/emulator -avd MyAndroidVirtualDeviceName -partition-size 256
abd
2
Sur les émulateurs plus récents, la commande de remontage peut ne pas fonctionner, vous pouvez remplacer: adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system par: adb root adb remount
Kamran Ahmed
20

Pour AVD avec 5.1.1 et 6.0, j'ai utilisé le script suivant dans Windows:

set adb=adb -s emulator-5558
set arch=x64
set pie=
adb start-server
%adb% root
%adb% remount
rem %adb% shell mount -o remount,rw /system
%adb% shell setenforce 0
%adb% install common/Superuser.apk
%adb% push %arch%/su%pie% /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push %arch%/su%pie% /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
rem %adb% shell mount -o remount,ro /system

exit /b

Besoin de UPDATE.zip de SuperSU. Décompressez-les dans n'importe quel dossier. Créez un fichier chauve-souris avec le contenu ci-dessus. N'oubliez pas de spécifier l'architecture et le périphérique nécessaires: set adb=adb -s emulator-5558et set arch=x64. Si vous exécutez Android supérieur ou égal à 5,0, passez set pie=à set pie=.pie. Exécuter. Vous obtenez une racine temporaire pour l'exécution en cours.

Si vous avez une erreur lors du remontage de la partition système, vous devez démarrer AVD à partir de la ligne de commande. Voir ci-dessous la première étape pour Android 7.

Si vous voulez le rendre persistant - mettez à jour le binaire dans SuperSU et stockez system.img à partir du dossier temporaire en remplacement de system.img par défaut.

Comment convertir la racine temporaire résultante en un permanent

Tout d'abord - il va à SuperSu. Il propose une mise à jour binaire. Mettez à jour de la manière normale. Reboot rejette.

Deuxièmement - uniquement pertinent pour les émulateurs. Le même AVD. L'essentiel est que les modifications apportées à l'image système ne seront pas enregistrées. Vous devez les garder pour eux.

Il existe déjà des instructions qui varient selon les émulateurs.

Pour AVD, vous pouvez essayer de trouver un fichier temporaire system.img, l'enregistrer quelque part et l'utiliser lorsque vous démarrez l'émulateur.

Sous Windows, il se trouve dans le %LOCALAPPDATA%\Temp\AndroidEmulatoret porte un nom similaire à TMP4980.tmp.

Vous le copiez dans un dossier avd device ( %HOMEPATH%\.android\avd\%AVD_NAME%.avd\) et vous l'avez renommé en system.img.

Maintenant, il sera utilisé au début, au lieu de l'habituel. Vrai si l'image du SDK est mise à jour, elle aura l'ancienne.

Dans ce cas, vous devrez le supprimer system.imget répéter l'opération lors de sa création.

Manuel plus détaillé en russe: http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931


Pour Android 7, vous devez exécuter des étapes supplémentaires: 1. Besoin d'exécuter l'émulateur manuellement. Accédez au dossier sdk sdk\tools\lib64\qt\lib. Exécutez à partir de cet émulateur de dossier avec des options -writable-system -selinux disabled comme ceci:

F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
  1. Vous devez redémarrer à adbdpartir de la racine:

    adb -s émulateur-5554 racine

Et remonter le système:

adb -s emulator-5554 remount

Il ne peut être donné qu'une seule fois par émulateur d'exécution. Et tout autre remontage peut interrompre le mode d'écriture. Pour cette raison, vous n'avez pas besoin d'exécuter d'autres commandes avec remount, comme mount -o remount,rw /system.

Une autre étape reste la même - télécharger le binaire, exécuter le binaire en tant que démon et ainsi de suite.

Image d'AVD Android 7 x86 avec root: AVD Android 7 x86 avec root


Si vous voyez une erreur concernant PIE lors de l'exécution du subinaire, alors vous téléchargez sur l'émulateur un mauvais binaire. Vous devez télécharger le binaire nommé su.piedans l'archive, mais sur l'émulateur, il doit être nommé su, non su.pie.

Enyby
la source
Pouvez-vous me dire les étapes pour rendre la racine persistante?
Satya
update binary in SuperSU and store system.img from temp folder as replace of default system.img.
Enyby
J'ai utilisé ces étapes pour obtenir le system.img de temp 1) cp / tmp / android / emulator-X8F7Hr ~ / Desktop / system.img 2) copié ce system.img à partir de temp dans les images système du SDK Android Mais quand je redémarrez l'émulateur puis l'émulateur n'est pas en état rooté ... Veuillez me guider sur le bon chemin
Satya
meilleure copie dans le répertoire avd. mais vous devez d'abord mettre à jour le binaire dans SuperSu en mode normal.
Enyby
J'ai mis à jour le binaire en mode normal et copié dans le répertoire AVD, puis root ne persiste pas
Satya
13

Je pense que le moyen le plus simple est de créer un alias pour la commande sh, par exemple

adb shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su

Testé sur Android Emulator 3.0 et supérieur.

débutant
la source
Cela a fonctionné pour moi aussi (sur l'émulateur x86_64 android 5.02) alors que la suggestion ci-dessus d'installer dans xbin n'a pas fonctionné.
Yannick
7
J'aimount: '/system' not in /proc/mounts
Kenny Wyland
échec du système avec 72
Duna
3

Voici mon pack avec tout ce dont vous avez besoin. Ou vous pouvez utiliser ce script:

echo on
set device=emulator-5554
set avd_name=
set adb=d:\Poprygun\DevTools\Android\Android-sdk\platform-tools\adb -s %device%
set emulator=d:\Poprygun\DevTools\Android\Android-sdk\emulator\emulator
set arch=x86
set pie=

echo Close all ANDROID emulators and press any key
pause
start %emulator% -avd Nexus_One_API_25 -verbose -writable-system
echo Wait until ANDROID emulator loading and press any key
pause

%adb% start-server
%adb% root
%adb% remount
%adb% shell setenforce 0
%adb% install D:\SuperSU\SuperSU.apk
%adb% push D:\SuperSU\su\%arch%\su.pie /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push D:\SuperSU\su\%arch%\su.pie /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
pause
exit /b
Andrew Zolotarev
la source
2

Je viens de remplacer et d'attribuer des attributs pour su à ~ / Android / Sdk / system-images / android-22 / google_apis / x86 / system.img et maintenant sur Android 5, j'ai toujours root même pour les nouveaux systèmes, il suffit d'installer SuperSu. apk

Android 6 is necessary only
adb root
adb shell
>/system/xbin/su --daemon &
>setenfoce 0

après cela, SuperSu.apk voit root. Mais je ne mets pas à jour le fichier binaire

xWeb
la source
1

J'ai utilisé une partie de la méthode des solutions ci-dessus; cependant, ils n'ont pas fonctionné complètement. Sur la dernière version d'Andy, cela a fonctionné pour moi:

Sur Andy (Root Shell) [Pour obtenir, cliquez avec le bouton droit sur l'icône HandyAndy et sélectionnez Term Shell]

À l'intérieur du shell, exécutez ces commandes:

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su

Ensuite, installez SuperSU et installez le binaire SU. Cela remplacera le binaire SU que nous venons de créer. (Facultatif) Supprimez SuperSU et installez Superuser par CWM. Installez à nouveau le binaire su. Maintenant, la racine fonctionne!

obc7787
la source
1

J'ai essayé plusieurs des suggestions ci-dessus, y compris SuperSU et je n'ai pas pu en faire fonctionner, mais j'ai trouvé quelque chose de beaucoup plus simple qui fonctionnait pour mes besoins. Dans mon cas, je voulais uniquement pouvoir exécuter sqlite à l'invite de commande. J'ai simplement créé un émulateur avec une ancienne version d'Android (Lollipop) et j'ai immédiatement obtenu un accès root.

Alan Todtenkopf
la source
-1

J'ai trouvé que l'émulateur API 23 x86_64 par défaut est rooté par défaut.

Vladimir Berezkin
la source
D'après ce que je sais, ce n'est pas parce que vous avez un # lorsque vous tapez "adb root" que les applications peuvent profiter des privilèges root. Tout essai d'écriture n'importe où dans / system a entraîné une erreur RO, même en essayant de le remonter en RW.
Fusseldieb