adb shell su funktioniert, adb root jedoch nicht

87

Ich habe mein entsperrtes Galaxy S3 (SGH-T999) gerootet.

Jetzt versuche ich, über die adb rootWindows- Eingabeaufforderung auszuführen. Es wird jedoch eine adbd cannot run as root in production buildsFehlermeldung angezeigt. Als erstes habe ich überprüft, ob mein Telefon wirklich gerootet ist.

Also habe ich folgendes versucht:

Öffnen Sie die Eingabeaufforderung

$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.**

Wenn ich dies jedoch tue adb root, erhalte ich eine adbd cannot run as root in production buildsFehlermeldung. Also, dachte ich, muss ich vielleicht ein paar zusätzliche Dinge tun, die über das hinausgehen, was ich oben getan habe. Ich habe alle Lösungen in den folgenden SO-Fragen ausprobiert:

Keines der oben genannten hat bei mir funktioniert. Alles, was sie tun, ist dem ROOT-Zugang INNERHALB von SHELL zu gewähren. Ich möchte adb rootarbeiten, damit ich verschiedene adb-Befehle ausführen kann, ohne in die Shell zu gehen.

Rumit Patel
quelle
5
funktioniert nicht in Android> 4.3. su fehlt.
Drdrej

Antworten:

31

Mit dem Design - adb rootBefehl funktioniert in der Entwicklung nur baut (dh engund userdebugdie haben in ro.debuggable=1der Standardeinstellung). Um den adb rootBefehl auf Ihrem ansonsten gerooteten Gerät zu aktivieren, fügen Sie die ro.debuggable=1Zeile einfach einer der folgenden Dateien hinzu:

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

Wenn Sie standardmäßig adb shellbeginnen möchten , rootfügen Sie ro.secure=0ebenfalls hinzu.

Alternativ können Sie eine modifizierte adbdBinärdatei verwenden (die nicht überprüft wird ro.debuggable).

Von 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.
quelle
8
Wo kann ich eine der oben genannten ausführbaren Dateien kompilieren lassen?
Waqas Bukhary
2
Ich füge die neuen Werte für ro.debuggable und ro.secure zu den von Ihnen angegebenen Dateien hinzu, aber sie werden bei jedem Neustart überschrieben und die Änderungen haben keine Auswirkungen.
Patryk Czachurski
30

In einigen entwicklerfreundliche ROMs können Sie nur aktivieren Root - Zugriff auf Einstellungen> Entwickler Option> Root - Zugriff . Danach adb rootwird verfügbar. Leider funktioniert es nicht für die meisten Standard-ROMs auf dem Markt.

NgaNguyenDuy
quelle
63
Ich sehe keine Option "Root-Zugriff" in den Entwicklungsoptionen.
Amalgovinus
2
@Amalgovinus Ich denke, es hängt davon ab, welchen Raum Sie benutzen. :)
NgaNguyenDuy
@NgaNguyenDuy Kannst du bitte identifizieren, welches Rom du verwendest?
Lobster Fighter
20

Beim Versuch, den Emulator zu rooten, ist dieses Problem aufgetreten. Ich habe herausgefunden, dass ich den Nexus 5x-Emulator ausgeführt habe, auf dem Google Play installiert ist. Erstellt einen anderen Emulator, der kein Google Play hatte und adb rootdas Gerät für Sie rooten wird. Hoffe das hilft jemandem.

Andrew Steinmetz
quelle
Wie können wir beide Emulatoren unterscheiden?
Sanjay
@Sanjay Wenn Sie den Android Virtual Device Manager öffnen, sollte eine Registerkarte für den Play Store angezeigt werden und Sie möchten sicherstellen, dass auf dem Gerät, das Sie rooten möchten, kein Play Store-Symbol vorhanden ist.
Andrew Steinmetz
2020 hat mir das geholfen, aber ich brauche eine Möglichkeit, dies auf Geräten mit aktiviertem Play Store ohne
gerootetes
9

Ich benutze für den su-Modus in abd Shell

adb shell "su"

Samuel Ivan
quelle
2
Unter Mac OS wird der Fehler "/ system / bin / sh: su: nicht gefunden" angezeigt. Irgendwelche Vorschläge bitte?
Sachin G
@SachinG Vielleicht hast du die falsche Art von Anführungszeichen verwendet? Versuchen Sie dies adb shell "su -c whoami"
auszuführen
@ gkpln3 Immer noch den gleichen Fehler. / system / bin / sh: su: nicht gefunden
Sachin G
8

Ich habe ein verwurzeltes Samsung Galaxy Trend Plus (GT-S7580).

Das Ausführen von 'adb root' gibt mir den gleichen Fehler 'adbd kann nicht als root in Produktionsbuilds ausgeführt werden'.

Wählen Sie für Geräte mit Entwickleroptionen -> Root-Zugriff "Nur ADB", um den ADB-Root-Zugriff auf das Gerät zu ermöglichen (wie von NgaNguyenDuy vorgeschlagen ) ).

Versuchen Sie dann, den Befehl gemäß der Lösung unter Starten eines Skripts als Root über ADB auszuführen . In meinem Fall wollte ich nur den Befehl 'netcfg rndis0 dhcp' ausführen, und ich habe es folgendermaßen gemacht:

adb shell "su -c netcfg rndis0 dhcp"

Bitte überprüfen Sie, ob Sie Fehler machen, während Sie es auf diese Weise ausführen.

Wenn es immer noch nicht funktioniert, überprüfen Sie, ob Sie das Gerät korrekt gerootet haben. Wenn Sie immer noch kein Glück haben, installieren Sie ein benutzerdefiniertes ROM wie Cyanogen Mod , damit 'adb root' funktioniert.

Antonius
quelle
7

Sie müssen die adbd-Binärdatei im Ordner boot.img / sbin / durch eine su-fähige ersetzen. Sie müssen auch einige default.prop-Änderungen vornehmen.

Samsung scheint dies schwieriger zu machen als andere Anbieter. Ich habe einige ADBD-Binärdateien, die Sie ausprobieren können, aber es erfordert das Wissen, die boot.img mit der neuen Binärdatei zu dekompilieren und neu zu kompilieren. Auch wenn Sie einen gesperrten Bootloader haben ... wird dies nicht passieren.

Außerdem verfügt Chainfire über eine App, die im Play Store die Berechtigung adbd root erteilt: https://play.google.com/store/apps/details?id=eu.chainfire.adbd&hl=de

Wenn Sie versuchen, ein Windows-Skript mit SU-Berechtigungen zu schreiben, können Sie diesen Kauf mit dem folgenden Befehlsstil durchführen. Sie müssen jedoch mindestens (am Telefon) SU-Berechtigungen für die erste Ausführung erteilen. .

ADB-Shell "su -c ls" <-Liste Arbeitsverzeichnis mit su-Rechten. ADB-Shell "su -c echo anytext> /data/test.file"

Dies sind nur einige Beispiele. Wenn Sie genau angeben, was Sie erreichen möchten, kann ich Ihnen möglicherweise spezifischere Ratschläge geben

-scosler

Scrosler
quelle
3

adbdhat ein Kompilierungsflag / eine Kompilierungsoption, um den Root-Zugriff zu aktivieren : ALLOW_ADBD_ROOT=1.

Bis zu Android 9: Wenn adbdIhr Gerät ohne dieses Flag kompiliert wird, werden beim Start immer die Berechtigungen gelöscht, und daher hilft "adb root" überhaupt nicht. Ich hatte die Anrufe flicken zu setuid(), setgid(), setgroups()und die Fähigkeit , fällt aus dem binär mich einen dauerhaft verwurzelt adbd auf meinen E - Book - Reader zu bekommen.

Mit Android 10 hat sich dies geändert. Wenn das Telefon / Tablet entsperrt ist ( ro.boot.verifiedbootstate == "orange"), ist der ADB-Root-Modus in jedem Fall möglich.

cweiske
quelle
1

Wenn Sie wirklich brauchen , um ADBso laufen root, der schnellste und einfachste Weg ist Android Benutzerdefinierte ROMs zu installieren und die beliebteste ist CyanogenModfür sie die haben Root AccessOptionen in Entwickler - Optionen Menü , in dem Sie Root - Zugriff geben wählen können apps and ADB. Ich habe CM schon früher verwendet, aber da es nicht mehr entwickelt wurde, habe ich versucht, nach Lösungen zu suchen. Obwohl CyanogenMod immer noch eine gute Alternative ist, weil es keine Bloatware hat.

Eine Alternative, die ich von einem Freund herausgefunden habe, ist die Verwendung einer adbd insecureApp, die Sie hier ausprobieren können: https://forum.xda-developers.com/showthread.php?t=1687590 . In meinem Fall funktioniert es perfekt mit einem benutzerdefinierten Android-Kernel, aber nicht mit dem Android-Standard-ROM (nur Vanille-Android). Sie können auch andere Alternativen ausprobieren, z. B. das Ändern boot.imgdes Android-ROM.

Warfreak92
quelle