оболонка adb su працює, але корінь adb не працює


93

Я вкорінив свій розблокований Galaxy S3 (SGH-T999)

Зараз я намагаюся запустити adb rootз командного рядка Windows , однак я отримую adbd cannot run as root in production buildsпомилку. Отже, найперше, що я перевірив, було, чи справді мій телефон кореневий?

Тож я спробував наступне:

Відкрийте командний рядок

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

Однак, коли я це роблю adb root, я отримую adbd cannot run as root in production buildsпомилку. Тож, я подумав, можливо, мені доведеться зробити кілька додаткових речей, крім того, що я робив вище. Я спробував усі рішення в таких запитаннях щодо SO:

Жодне з перерахованого не працювало для мене. Все, що вони роблять, - це надати КОРЕНЮ доступ ВНУТРІ ШУЛУ. Я хочу adb rootпрацювати, щоб я міг виконувати різні команди adb БЕЗ входу в оболонку.


5
не працює в android> 4.3. su відсутній.
drdrej

Відповіді:


35

За задумом adb rootкоманда працює тільки в розробці збірки (тобто engі userdebugякі мають ro.debuggable=1за замовчуванням). Отже, щоб увімкнути adb rootкоманду на іншому корінному пристрої, просто додайте ro.debuggable=1рядок до одного з наступних файлів:

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

Якщо ви хочете adb shellрозпочати як rootза замовчуванням - додайте ro.secure=0також.

В якості альтернативи ви можете використовувати модифікований adbdдвійковий файл (який не перевіряє наявність ro.debuggable)

З 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.

9
Де я можу отримати зібраний виконуваний файл із вищезазначеного?
Waqas Bukhary

3
Я додаю нові значення для ro.debuggable та ro.secure до вказаних вами файлів, але вони все одно перезаписуються при кожному перезавантаженні, і зміни не мають жодного ефекту.
Патрик Чачурський

31

У деяких ПЗУ, зручних для розробників, ви можете просто ввімкнути Root Access у меню Параметри> Параметр розробника> Кореневий доступ . Після цього adb rootстає доступним. На жаль, це не працює для більшості запасних ПЗУ на ринку.


64
Я не бачу опції "Кореневий доступ" у параметрах розробника.
Амальговін

2
@Amalgovinus Я думаю, це залежить від того, яку кімнату ви використовуєте. :)
NgaNguyenDuy

@NgaNguyenDuy Чи можете ви визначити, який ром ви використовуєте?
Lobster Fighter

22

Я зіткнувся з цією проблемою при спробі викорінити емулятор, і з’ясував, що це тому, що я запускав емулятор Nexus 5x, на якому був Google Play. Створив інший емулятор, який не мав google play і adb rootвикорінить пристрій для вас. Сподіваюся, це комусь допомагає.


як ми можемо розрізнити обидва емулятори?
Санджай

@Sanjay, коли ви відкриваєте диспетчер віртуальних пристроїв Android, ви побачите вкладку Play Store, і ви хочете переконатися, що на пристрої, який ви намагаєтеся викорінити, немає піктограми play store.
Ендрю Штайнметц

1
2020, це мені допомогло, але мені потрібен спосіб це зробити на пристроях з увімкненим магазином ігор без укоріненого телефону, але не впевнений, що це можливо
trigster

8

Я використовую для введення режиму su в оболонці abd

оболонка adb "su"


2
У Mac OS з’являється повідомлення про помилку "/ system / bin / sh: su: not found". Будь-які пропозиції, будь ласка?
Сачин Г

@SachinG Можливо, ви використали неправильний тип лапок? спробуйте запустити цеadb shell "su -c whoami"
gkpln3

@ gkpln3 Все ще отримує ту саму помилку. / system / bin / sh: su: не знайдено
Sachin G

У мене та сама помилка
Джек

8

У мене коріння Samsung Galaxy Trend Plus (GT-S7580).

Запуск "корінь adb" дає мені ту ж помилку "adbd не може працювати як корінь у виробничих збірках".

Для пристроїв, які мають Параметри розробника -> Кореневий доступ, виберіть «Лише ADB», щоб забезпечити кореневий доступ adb до пристрою (як запропоновано NgaNguyenDuy ).

Потім спробуйте запустити команду згідно з рішенням у Запустіть сценарій як root через ADB . У моєму випадку я просто хотів запустити команду 'netcfg rndis0 dhcp', і зробив це так:

adb shell "su -c netcfg rndis0 dhcp"

Будь ласка, перевірте, чи не допускаєте ви помилок під час запуску.

Якщо це все ще не працює, перевірте, чи правильно ви вкорінили пристрій. Якщо все-таки не пощастило, спробуйте встановити спеціальний ПЗУ, такий як Cyanogen Mod , щоб "adb root" працював.


7

Вам потрібно замінити двійковий файл adbd у папці boot.img / sbin / на такий, який підтримує su. Вам також доведеться внести деякі редагування за замовчуванням. Prop.

Здається, Samsung ускладнює це, ніж інші постачальники. У мене є кілька двійкових файлів adbd, які ви можете спробувати, але для цього знадобляться знання про декомпіляцію та повторну компіляцію boot.img з новим двійковим файлом. Крім того, якщо у вас заблокований завантажувач ... цього не трапиться.

Також Chainfire має програму, яка надає дозвіл на коріння adbd у магазині відтворення: https://play.google.com/store/apps/details?id=eu.chainfire.adbd&hl=uk

Нарешті, якщо ви намагаєтеся написати скрипт Windows із дозволами SU, ви можете зробити це, використовуючи такий командний стиль ... Однак вам, принаймні, потрібно буде надати (по телефону) дозволи SU на перший час, коли він пробіг .. .

adb shell "su -c ls" <-list робочий каталог із правами su. оболонка adb "su -c echo anytext> /data/test.file"

Це лише кілька прикладів. Якщо ви конкретно заявите, чого намагаєтесь досягти, я можу дати більш конкретні поради

-сколер


5

adbdмає компіляції прапор / параметр , щоб дозволити доступ кореня: ALLOW_ADBD_ROOT=1.

До Android 9: Якщо adbdна вашому пристрої компілюється без цього прапорця, він завжди скидає привілеї під час запуску, і, отже, "корінь adb" взагалі не допоможе. Я повинен був залатати виклики до setuid(), setgid(),setgroups() а також можливість випадає з довічних себе , щоб отримати постійно кореняться adbd на моєму читання електронних книг.

З Android 10 це змінилося; коли телефон / планшет розблоковано ( ro.boot.verifiedbootstate == "orange"), тоді в будь-якому випадку можливий режим коріння adb.


1

Якщо вам дійсно потрібно ADBзапустити як root, найшвидший і найпростіший спосіб - це встановити користувацькі ПЗУ для Android, а найпопулярніший - CyanogenModце те, що він має Root Accessопції в меню параметрів розробника, де ви можете надати root-доступapps and ADB . Я використовував CM раніше, але оскільки він більше не розроблявся, я спробував знайти деякі рішення там. Хоча CyanogenMod все ще є хорошою альтернативою, оскільки в ньому немає вірусів.

Одну альтернативу, яку я дізнався від одного, це використання adbd insecureпрограми, яку ви можете спробувати тут: https://forum.xda-developers.com/showthread.php?t=1687590 . У моєму випадку це ідеально працює з користувацьким ядром Android, але не зі стандартним ПЗУ для Android (лише для ванільного андроїда). Ви можете спробувати інші альтернативи, такі як модифікація boot.imgAndroid ROM.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.