adb shell su fonctionne mais adb root ne fonctionne pas

93

J'ai rooté mon Galaxy S3 déverrouillé (SGH-T999)

Maintenant, j'essaye de courir à adb rootpartir de l' invite de commande Windows , cependant, j'obtiens une adbd cannot run as root in production buildserreur. Donc, la toute première chose que j'ai vérifiée était de savoir si mon téléphone était vraiment rooté?

J'ai donc essayé ce qui suit:

Ouvrir l'invite de commande

$adb devices // lists my device
$adb shell //goes to shell
$su // opens a 'SuperSu' prompt on my phone and I 'Grant' permission
# // Before following the rooting instructions, I was getting 'no su command found' in the previous step. So, I believe my phone is ROOTED. **Correct me if I'm wrong.**

Cependant, quand je le fais adb root, j'obtiens une adbd cannot run as root in production buildserreur. Alors, j'ai pensé, je devrais peut-être faire des choses supplémentaires au-delà de ce que j'ai fait ci-dessus. J'ai essayé toutes les solutions dans les questions SO suivantes:

Aucun de ces éléments n'a fonctionné pour moi. Tout ce qu'ils font est de donner l'accès ROOT À L'INTÉRIEUR de SHELL. Je veux adb roottravailler pour pouvoir exécuter diverses commandes adb SANS entrer dans le shell.

Rumit Patel
la source
5
ne fonctionne pas sous Android> 4.3. su est manquant.
drdrej

Réponses:

35

Par conception, la adb rootcommande fonctionne uniquement dans les versions de développement (c'est eng-à- dire et userdebugqui ont ro.debuggable=1par défaut). Donc, pour activer la adb rootcommande sur votre appareil autrement enraciné , ajoutez simplement la ro.debuggable=1ligne à l'un des fichiers suivants:

/system/build.prop
/system/default.prop
/data/local.prop

Si vous voulez adb shellcommencer rootpar défaut, ajoutez ro.secure=0également.

Vous pouvez également utiliser un adbdbinaire modifié (qui ne vérifie pas ro.debuggable)

Depuis https://android.googlesource.com/platform/system/core/+/master/adb/daemon/main.cpp

#if defined(ALLOW_ADBD_ROOT)
// The properties that affect `adb root` and `adb unroot` are ro.secure and
// ro.debuggable. In this context the names don't make the expected behavior
// particularly obvious.
//
// ro.debuggable:
//   Allowed to become root, but not necessarily the default. Set to 1 on
//   eng and userdebug builds.
//
// ro.secure:
//   Drop privileges by default. Set to 1 on userdebug and user builds.
Alex P.
la source
9
Où puis-je obtenir l'exécutable compilé de ce qui précède?
Waqas Bukhary
3
J'ajoute les nouvelles valeurs pour ro.debuggable et ro.secure aux fichiers que vous avez spécifiés, mais elles sont toujours écrasées à chaque redémarrage et les modifications n'ont aucun effet.
Patryk Czachurski
31

Dans certaines ROM conviviales pour les développeurs, vous pouvez simplement activer l' accès racine dans Paramètres> Option développeur> Accès racine . Après cela adb rootdevient disponible. Malheureusement, cela ne fonctionne pas pour la plupart des ROM stockées sur le marché.

NgaNguyenDuy
la source
64
Je ne vois pas d'option "Accès racine" dans les options de développement.
Amalgovinus
2
@Amalgovinus Je pense que cela dépend de la pièce que vous utilisez. :)
NgaNguyenDuy
@NgaNguyenDuy Pouvez-vous identifier la rom que vous utilisez?
Lobster Fighter
22

J'ai rencontré ce problème en essayant de rooter l'émulateur, j'ai découvert que c'était parce que j'exécutais l'émulateur Nexus 5x qui avait Google Play dessus. Création d'un émulateur différent qui n'a pas Google Play et adb rootrootera l'appareil pour vous. J'espère que cela aide quelqu'un.

Andrew Steinmetz
la source
comment pouvons-nous différencier les deux émulateur?
Sanjay
@Sanjay lorsque vous ouvrez le Gestionnaire de périphériques virtuels Android, vous devriez voir un onglet pour Play Store et vous voulez vous assurer qu'il n'y a pas d'icône Play Store présente sur l'appareil que vous essayez de rooter.
Andrew Steinmetz le
1
2020, cela m'a aidé mais j'ai besoin d'un moyen de le faire sur les appareils avec Play Store activé sans téléphone enraciné mais je ne sais pas si c'est possible
déclencheur
8

J'utilise pour entrer en mode su dans abd shell

shell adb "su"

Samuel Ivan
la source
2
Sous Mac OS, j'obtiens l'erreur "/ system / bin / sh: su: not found". Des suggestions s'il vous plaît?
Sachin G
@SachinG Peut-être avez-vous utilisé le mauvais type de citations? essayez d'exécuter ceciadb shell "su -c whoami"
gkpln3
@ gkpln3 Toujours la même erreur. / system / bin / sh: su: not found
Sachin G
J'ai la même erreur
jack il y a
8

J'ai un Samsung Galaxy Trend Plus (GT-S7580) enraciné.

L'exécution de 'adb root' me donne la même erreur 'adbd ne peut pas s'exécuter en tant que root dans les versions de production'.

Pour les appareils dotés d'options de développement -> Accès root, choisissez "ADB uniquement" pour fournir un accès adb root à l'appareil (comme suggéré par NgaNguyenDuy ).

Ensuite, essayez d'exécuter la commande selon la solution à Lancer un script en tant que root via ADB . Dans mon cas, je voulais juste exécuter la commande 'netcfg rndis0 dhcp', et je l'ai fait de cette façon:

adb shell "su -c netcfg rndis0 dhcp"

Veuillez vérifier si vous faites des erreurs en l'exécutant de cette façon.

Si cela ne fonctionne toujours pas, vérifiez si vous avez correctement rooté l'appareil. Si toujours pas de chance, essayez d'installer une ROM personnalisée telle que Cyanogen Mod pour que 'adb root' fonctionne.

Antony
la source
7

Vous devez remplacer le binaire adbd dans le dossier boot.img / sbin / par un qui est su capable. Vous devrez également apporter des modifications à default.prop.

Samsung semble rendre cela plus difficile que les autres fournisseurs. J'ai quelques binaires adbd que vous pouvez essayer, mais cela nécessitera la connaissance de la décompilation et de la recompilation du boot.img avec le nouveau binaire. De plus, si vous avez un bootloader verrouillé ... cela n'arrivera pas.

Chainfire a également une application qui accordera l'autorisation root adbd dans le Play Store: https://play.google.com/store/apps/details?id=eu.chainfire.adbd&hl=en

Enfin, si vous essayez d'écrire un script Windows avec des autorisations SU, vous pouvez faire cet achat en utilisant le style de commande suivant ... Cependant, vous devrez au moins accorder (au téléphone) les autorisations SU la première fois qu'il est exécuté. .

adb shell "su -c ls" <-list répertoire de travail avec les droits su. shell adb "su -c echo anytext> /data/test.file"

Ce ne sont que quelques exemples. Si vous indiquez précisément ce que vous essayez d'accomplir, je pourrai peut-être vous donner des conseils plus spécifiques

-scosler

scrosler
la source
5

adbda un drapeau compilation / option pour activer l' accès root: ALLOW_ADBD_ROOT=1.

Jusqu'à Android 9: Si adbdsur votre appareil est compilé sans cet indicateur, il supprimera toujours les privilèges au démarrage et donc "adb root" n'aidera pas du tout. Je devais patcher les appels setuid(), setgid(), setgroups()et la capacité des gouttes de moi - même binaire pour obtenir une ADBD permanente sur mon enracinée lecteur ebook.

Avec Android 10, cela a changé; lorsque le téléphone / la tablette est déverrouillé ( ro.boot.verifiedbootstate == "orange"), le mode adb root est dans tous les cas possible.

cweiske
la source
1

Si vous avez vraiment besoin d' ADBexécuter en tant que root, le moyen le plus rapide et le plus simple est d'installer des ROM personnalisées Android et le plus populaire est CyanogenModqu'il a les Root Accessoptions dans le menu des options du développeur où vous pouvez choisir d'accorder un accès root apps and ADB. J'ai utilisé CM avant mais comme il n'était plus développé, j'ai essayé de chercher des solutions là-bas. Bien que CyanogenMod soit toujours une bonne alternative car il ne dispose pas de bloatware.

Une alternative que j'ai découverte d'un ami consiste à utiliser une adbd insecureapplication que vous pouvez essayer ici: https://forum.xda-developers.com/showthread.php?t=1687590 . Dans mon cas, cela fonctionne parfaitement avec un noyau personnalisé Android, mais pas avec la ROM stock Android (Android vanilla uniquement). Vous pouvez également essayer d'autres alternatives comme la modification boot.imgde la ROM Android.

warfreak92
la source