web-dev-qa-db-fra.com

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

J'ai toutes les versions du SDK Android (de la 1.5 à la 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 aussi installé l'application z4root

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 pourrons ainsi obtenir un accès root. si cela est vrai, alors comment faire cela? J'utilise les systèmes d'exploitation Linux et Windows.

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

99
Preetam

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:/ #
88
JRaymond

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

Exigences:

Instructions

  1. Installer le SuperSu.apk 

    • Installez l’application SuperSu en premier lieu, faites simplement un glisser-déposer (si vous utilisez la dernière version de l’émulateur ou sideload via adb i.e adb -e install supersu.apk)

    • Après l’avoir installé, lors de son exécution, un écran comme indiqué ci-dessous indique «Il n’existe aucun binaire SU installé ..». Cette erreur confirme simplement que le périphérique n'est pas encore enraciné.

 enter image description here


  1. Créer une partition système en écriture pour l'émulateur

    • Comme il est suggéré, nous devons donner à l'émulateur le droit d'écrire des fichiers système.

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

Remarque: accédez au dossier tools où le SDK Android est installé et ouvrez l'invite de commande en appuyant sur la touche Maj et en cliquant avec le bouton droit de la souris.


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

    • Extrayez le fichier de récupération flashable.Zip (contenant les fichiers binaires de différentes architectures)

Important! Utilisez uniquement le binaire su qui correspond à votre architecture avd, par exemple x86, armez etc., et notez le chemin où vous avez extrait ces binaires.

  • Assurez-vous que vous utilisez adb en tant que root et que vous devez remonter le système . Entrez simplement ces codes

adb root

adb remount

Il est maintenant temps de pousser le binaire su:

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

(tant pis pour mon emplacement spécifique de binaire su, tout emplacement est correct tant qu'il n'y a pas d'espace blanc))

note: Pour savoir comment bin ou xbin faire dans la console avant:> adb Shell,> ls /system/xbin/su

Si cela échoue, essayez plutôt de pousser ceci vers ce répertoire /system/xbin/su. De même, pour les émulateurs fonctionnant sous Android 5.1 et versions antérieures, utilisez la variable su et non su.pie.


  1. Modifier les permissions du binaire su

    • Ensuite, modifions un peu les permissions de su binary. Nous devons faire cela dans le périphérique émulateur via adb:

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

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


  1. Définition de la directive install sur su binary et définition de daemon

Tapez les codes:

su --install

et pour la mise en place du démon:

su --daemon&

Important !! Prenez note de l'espacement


  1. Paramétrer SELinux sur Permissive (c'est-à-dire désactiver SE Linux)

    • Enfin, désactivez selinux via ce code:

setenforce 0


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

Remarque: Si vous rencontrez des boucles d’amorçage, ne mettez pas à jour les fichiers binaires, utilisez-le tel quel.


C’est à peu près tout ça !!

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

 enter image description here

Pour que la racine persistante conserve la mise à jour su binaire (à l'aide de la méthode Normal), copiez alors system.img à partir du répertoire temporaire (Users\AppData\Local\Temp\Android Emulator le fichier est généralement nommé aléatoirement par exemple 1359g.tmp avec une taille importante) et remplacez le code par défaut system.img.

Mettre à 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 4 août 2018

Avec l'émergence de 27.3.x de l'émulateur, il est maintenant beaucoup plus facile de conserver la racine grâce à la fonction d'instantané (si la copie de la méthode system.img ne fonctionne pas):

Idéalement, cela ressemble plus à hibernarig au périphérique virtuel avec une configuration intacte, donc tout est préservé. 

Snapshots

Vous pouvez maintenant enregistrer plusieurs instantanés AVD pour un périphérique donné configuration et choisissez les instantanés enregistrés à charger lorsque vous démarrez l'émulateur. Démarrer un périphérique virtuel en chargeant un instantané est un peu comme réveiller un physique d'un état de sommeil, par opposition à un démarrage à partir d'un état éteint.

Cela implique que la seule condition requise pour démarrer l'émulateur consiste à ajouter le paramètre -writable-system à la commande normale emulator -avd [avdname] pour démarrer l'émulateur. (Exécuter l'émulateur simplement avec emulator -avd [avdname] ne lance pas la version/copie enracinée ou peut entraîner une erreur)

Testé sur le niveau 22 de l'API

Voir également l’autre billet: Emulateur Android: comment éviter la boucle de démarrage après l’enracinement? et leurs mises à jour.

Remarques

La plupart des contenus en référence concernaient des versions plus anciennes d'Android, d'où la raison des différentes commandes et des différents chemins que j'ai modifiés. 

Remerciements;

58
xavier_fakerat

Voici la liste des commandes que vous devez exécuter pendant le fonctionnement de l'émulateur. J'ai testé 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 est situé dans le répertoire de travail. Vous pouvez trouver su et superutilisateur 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 root.

33
a.b.d

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éballez-les dans n'importe quel dossier. Créer un fichier bat 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-5558 et set Arch=x64. Si vous utilisez Android au-dessus ou égal à 5.0, remplacez set pie= par set pie=.pie. Exécuter. Vous obtenez une racine temporaire pour l'exécution en cours.

Si vous rencontrez une erreur sur la partition système remount, vous devez démarrer AVD à partir de la ligne de commande. Voir ci-dessous 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 temp en remplacement de system.img par défaut.

Comment convertir la racine temporaire résultante en un permanent

Tout d'abord, cela va à SuperSu. Il offre une mise à niveau binaire. Mettre à jour de manière normale. Reboot rejeter.

Deuxième - pertinent uniquement pour les émulateurs. Le même AVD. La ligne du bas est que les modifications de l'image du système ne seront pas enregistrées. Vous devez les garder pour eux-mêmes.

Il y a déjà des instructions qui varient pour différents émulateurs.

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

Sous Windows, il se trouve dans le %LOCALAPPDATA%\Temp\AndroidEmulator et porte un nom du type TMP4980.tmp.

Vous le copiez sur un périphérique avd de dossier (%HOMEPATH%\.Android\avd\%AVD_NAME%.avd\) et renommé en system.img.

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

Dans ce cas, vous devrez supprimer ce system.img et 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 . Aller dans le dossier sdk sdk\tools\lib64\qt\lib. Exécuter à partir de cet émulateur de dossier avec les options -writable-system -selinux disabledComme 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 adbd à partir de la racine:

    adb -s emulator-5554 root

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 toute autre remontée peut casser le mode écriture. Pour cette raison, vous n'avez pas besoin de lancer 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, etc.

Image de AVD Android 7 x86 avec la racine:  AVD Android 7 x86 with root


Si vous voyez une erreur à propos de PIE lors de l'exécution de su binary, vous chargez alors dans un binaire incorrect pour l'émulateur. Vous devez télécharger le binaire nommé su.pie à l'intérieur de l'archive, mais sur l'émulateur, il doit être nommé su et non pas su.pie.

19
Enyby

Je pense que le moyen le plus simple consiste à 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.

13
newbie

ici 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
2
Poprygun

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

1
Alan Todtenkopf

J'ai utilisé une partie de la méthode parmi les 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-droit sur l'icône HandyAndy et sélectionnez Term Shell]

Dans le 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 le binaire SU. Cela remplacera le fichier 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!

1
obc7787

Essayez une autre façon de résoudre cette question.

Utilisez Genymotion au lieu de l’émulateur Android par défaut. Il est enraciné par défaut. C'est beaucoup plus facile et ressemble plus à un téléphone normal. C'est gratuit pour un usage personnel.

J'ai trouvé cette question parce que je veux installer le framework Xposed sur l'émulateur Android par défaut. Cette installation a besoin de root et de flash avec une récupération personnalisée (par exemple, TWRP), les deux étant difficiles pour l'émulateur Android par défaut. Enfin, j'ai utilisé Genymotion et tout s'est terminé en quelques minutes.

1
user2360478

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

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

après cela, SuperSu.apk voit la racine. Mais je ne met pas à jour le fichier binaire

0
xWeb