adb shell su działa, ale adb root nie

93

Zrootowałem odblokowanego Galaxy S3 (SGH-T999)

Teraz próbuję uruchomić adb rootz wiersza polecenia systemu Windows , jednak pojawia się adbd cannot run as root in production buildsbłąd. Więc pierwszą rzeczą, którą sprawdziłem, było to, czy mój telefon jest naprawdę zrootowany?

Więc spróbowałem następujących rzeczy:

Otwórz wiersz polecenia

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

Jednak kiedy to robię, pojawia adb rootsię adbd cannot run as root in production buildsbłąd. Pomyślałem więc, że być może będę musiał zrobić kilka dodatkowych rzeczy poza tym, co zrobiłem powyżej. Wypróbowałem wszystkie rozwiązania w następujących pytaniach SO:

Żadne z powyższych nie działało dla mnie. Wszystko, co robią, to daje ROOTowi dostęp WEWNĄTRZ SHELL. Chcę adb rootpracować, aby móc wykonywać różne polecenia adb BEZ wchodzenia w powłokę.

rumit patel
źródło
5
nie działa na Androidzie> 4.3. su brakuje.
drdrej

Odpowiedzi:

35

adb rootPolecenie Zgodnie z projektem działa tylko w kompilacjach deweloperskich (tj. engI userdebugktóre mają ro.debuggable=1domyślnie). Aby włączyć adb rootpolecenie na urządzeniu zrootowanym w inny sposób , po prostu dodaj ro.debuggable=1wiersz do jednego z następujących plików:

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

Jeśli chcesz adb shellzacząć rootdomyślnie - dodaj ro.secure=0również.

Alternatywnie możesz użyć zmodyfikowanego adbdpliku binarnego (który nie sprawdza ro.debuggable)

Z 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.
źródło
9
Gdzie mogę uzyskać skompilowany plik wykonywalny powyższego?
Waqas Bukhary
3
Dodaję nowe wartości dla ro.debuggable i ro.secure do określonych plików, ale nadal są one nadpisywane przy każdym ponownym uruchomieniu, a zmiany nie mają żadnego wpływu.
Patryk Czachurski
31

W niektórych przyjaznych dla programistów ROMach można po prostu włączyć dostęp do roota w Ustawienia> Opcja programisty> Dostęp do roota . Po tym stanie adb rootsię dostępny. Niestety nie działa z większością dostępnych na rynku pamięci ROM.

NgaNguyenDuy
źródło
64
Nie widzę opcji „Dostęp do roota” w opcjach programisty.
Amalgovinus
2
@Amalgovinus Myślę, że to zależy od używanego pokoju. :)
NgaNguyenDuy
@NgaNguyenDuy Czy możesz określić, którego romu używasz?
Lobster Fighter
22

Napotkałem ten problem podczas próby zrootowania emulatora, dowiedziałem się, że to dlatego, że korzystałem z emulatora Nexus 5x, który miał Google Play. Utworzono inny emulator, który nie ma Google Play i adb rootzrootuje urządzenie. Mam nadzieję, że to komuś pomoże.

Andrew Steinmetz
źródło
jak możemy rozróżnić oba emulatory?
Sanjay
@Sanjay Po otwarciu Menedżera urządzeń wirtualnych Android powinieneś zobaczyć zakładkę Sklep Play i chcesz się upewnić, że na urządzeniu, które próbujesz zrootować, nie ma ikony Sklepu Play.
Andrew Steinmetz
1
2020, to mi pomogło, ale potrzebuję sposobu, aby to zrobić na urządzeniach z włączonym
Sklepem Play bez zrootowanego
8

Używam do wejścia w tryb su w powłoce abd

powłoka adb „su”

Samuel Ivan
źródło
2
W systemie Mac OS pojawia się błąd „/ system / bin / sh: su: nie znaleziono”. Jakieś sugestie?
Sachin G
@SachinG Może użyłeś niewłaściwego typu cytatów? spróbuj uruchomić toadb shell "su -c whoami"
gkpln3
@ gkpln3 Nadal pojawia się ten sam błąd. / system / bin / sh: su: not found
Sachin G
Mam ten sam błąd
jack
8

Mam zrootowanego Samsunga Galaxy Trend Plus (GT-S7580).

Uruchomienie „adb root” daje mi ten sam błąd „adbd nie może działać jako root w kompilacjach produkcyjnych”.

W przypadku urządzeń, które mają opcje programisty -> dostęp do roota, wybierz „tylko ADB”, aby zapewnić dostęp root adb do urządzenia (zgodnie z sugestią NgaNguyenDuy ).

Następnie spróbuj uruchomić polecenie zgodnie z rozwiązaniem w Uruchom skrypt jako root przez ADB . W moim przypadku chciałem po prostu uruchomić polecenie `` netcfg rndis0 dhcp '' i zrobiłem to w ten sposób:

adb shell "su -c netcfg rndis0 dhcp"

Sprawdź, czy nie popełniasz błędów podczas uruchamiania go w ten sposób.

Jeśli nadal nie działa, sprawdź, czy poprawnie zrootowałeś urządzenie. Jeśli nadal nie masz szczęścia, spróbuj zainstalować niestandardową pamięć ROM, taką jak Cyanogen Mod , aby „adb root” działał.

Antony
źródło
7

Musisz zamienić plik binarny adbd w folderze boot.img / sbin / na taki, który obsługuje su. Będziesz także musiał wprowadzić pewne zmiany w pliku default.prop.

Wydaje się, że Samsung sprawia, że ​​jest to trudniejsze niż inni dostawcy. Mam kilka plików binarnych adbd, które możesz wypróbować, ale będzie to wymagało wiedzy na temat dekompilacji i ponownej kompilacji pliku boot.img z nowym plikiem binarnym. Ponadto, jeśli masz zablokowany program ładujący ... to się nie stanie.

Chainfire ma również aplikację, która przyzna uprawnienia roota adbd w sklepie Play: https://play.google.com/store/apps/details?id=eu.chainfire.adbd&hl=en

Na koniec, jeśli próbujesz napisać skrypt systemu Windows z uprawnieniami SU, możesz to zrobić, kupując za pomocą następującego stylu poleceń ... Jednak będziesz musiał przynajmniej przyznać (przez telefon) uprawnienia SU w pierwszym czasie jego uruchomienia. .

powłoka adb "su -c ls" <-list katalog roboczy z prawami su. powłoka adb „su -c echo anytext> /data/test.file”

To tylko kilka przykładów. Jeśli szczegółowo określisz, co próbujesz osiągnąć, być może będę mógł udzielić bardziej szczegółowych porad

-scosler

Scrosler
źródło
5

adbdma kompilacji flagi / opcję, aby umożliwić dostęp do konta root: ALLOW_ADBD_ROOT=1.

Aż do Androida 9: Jeśli adbdna twoim urządzeniu zostanie skompilowane bez tej flagi, zawsze zrzuci uprawnienia podczas uruchamiania, a zatem „adb root” w ogóle nie pomoże. Miałem załatać połączenia do setuid(), setgid(), setgroups()i zdolność odpada od binarnego się dostać na stałe zakorzenione adbd na mój czytnik ebook.

Z Androidem 10 to się zmieniło; gdy telefon / tablet jest odblokowany ( ro.boot.verifiedbootstate == "orange"), w każdym przypadku możliwy jest tryb root adb.

cweiske
źródło
1

Jeśli naprawdę potrzebujesz ADBuruchomić jako root, najszybszym i najłatwiejszym sposobem jest zainstalowanie niestandardowych ROM-ów z Androidem, a najpopularniejszym jest CyanogenModto, że ma Root Accessopcje w menu opcji programisty, w których możesz przyznać uprawnienia roota apps and ADB. Używałem CM wcześniej, ale ponieważ nie był już rozwijany, próbowałem tam znaleźć jakieś rozwiązania. Chociaż CyanogenMod jest nadal dobrą alternatywą, ponieważ nie ma nadużyć.

Jedną z możliwości, o której dowiedziałem się od znajomego, jest adbd insecureaplikacja, którą możesz wypróbować tutaj: https://forum.xda-developers.com/showthread.php?t=1687590 . W moim przypadku działa doskonale z niestandardowym jądrem Androida, ale nie z pamięcią ROM systemu Android (tylko waniliowy Android). Możesz także wypróbować inne alternatywy, takie jak modyfikacja boot.imgpamięci ROM systemu Android.

warfreak92
źródło