adb shell su работает, но adb root - нет

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:

У меня ничего из вышеперечисленного не сработало. Все, что они делают, это дают ROOT доступ ВНУТРИ ОБОЛОЧКИ. Я хочу 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 в указанные вами файлы, но они по-прежнему перезаписываются при каждой перезагрузке, и изменения не имеют никакого эффекта.
Patryk Czachurski
31

В некоторых удобных для разработчиков ПЗУ вы можете просто включить рут-доступ в « Настройки»> «Разработчик»> «Корневой доступ» . После этого adb rootстановится доступным. К сожалению, это не работает для большинства стандартных прошивок на рынке.

NgaNguyenDuy
источник
64
Я не вижу опции «Root-доступ» в настройках разработчика.
Амальговинус
2
@Amalgovinus Я думаю, это зависит от того, какую комнату вы используете. :)
NgaNguyenDuy 07
@NgaNguyenDuy Не могли бы вы определить, какой ROM вы используете?
Lobster Fighter
22

Я столкнулся с этой проблемой при попытке получить root-доступ к эмулятору, я обнаружил, что это потому, что я запускал эмулятор Nexus 5x, на котором был Google Play. Создал другой эмулятор, у которого не было Google Play, и он adb rootбудет рутировать устройство за вас. Надеюсь, это кому-то поможет.

Эндрю Стейнмец
источник
как мы можем различить оба эмулятора?
Санджай
@Sanjay, когда вы открываете Диспетчер виртуальных устройств Android, вы должны увидеть вкладку для Play Store, и вы хотите убедиться, что на устройстве, которое вы пытаетесь получить root-доступ, нет значка магазина воспроизведения.
Эндрю Стейнмец,
1
2020, это помогло мне, но мне нужен способ сделать это на устройствах с включенным игровым магазином без
рутированного
8

Я использую для входа в режим su в оболочке abd

adb shell "su"

Самуэль Иван
источник
2
В Mac OS я получаю ошибку «/ system / bin / sh: su: not found». Есть предложения, пожалуйста?
Sachin G
@SachinG Может быть, вы использовали неправильные цитаты? попробуйте запустить этоadb shell "su -c whoami"
gkpln3
@ gkpln3 По-прежнему возникает та же ошибка. / system / bin / sh: su: not found
Sachin G
У меня такая же ошибка
Джек
8

У меня рутированный Samsung Galaxy Trend Plus (GT-S7580).

Запуск 'adb root' дает мне ту же ошибку 'adbd не может работать как root в производственных сборках'.

Для устройств, у которых есть параметры разработчика -> Root-доступ, выберите «ADB only», чтобы предоставить устройству root-доступ по adb (как предлагает NgaNguyenDuy ).

Затем попробуйте выполнить команду в соответствии с решением в разделе Запуск сценария от имени пользователя root через ADB . В моем случае я просто хотел запустить команду netcfg rndis0 dhcp, и сделал это следующим образом:

adb shell "su -c netcfg rndis0 dhcp"

Пожалуйста, проверьте, не допускаете ли вы ошибок при использовании этого способа.

Если он по-прежнему не работает, проверьте, правильно ли вы рутировали устройство. Если по-прежнему не повезло, попробуйте установить пользовательское ПЗУ, такое как Cyanogen Mod, чтобы «adb root» работал.

Антоний
источник
7

Вам необходимо заменить двоичный файл adbd в папке boot.img / sbin / на тот, который поддерживает su. Вам также придется внести некоторые правки в default.prop.

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

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

Наконец, если вы пытаетесь написать сценарий 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 root» не поможет вообще. Я должен был залатать вызовы к setuid(), setgid(),setgroups() а также возможность выпадает из двоичных себя , чтобы получить постоянно коренятся adbd на моем чтения электронных книг.

С Android 10 это изменилось; когда телефон / планшет разблокирован ( ro.boot.verifiedbootstate == "orange") то режим adb root возможен в любом случае.

Cweiske
источник
1

Если вам действительно нужно ADBзапускать от имени root, самый быстрый и простой способ - установить Android Custom ROMs, а самый популярный - CyanogenModэто Root Accessопции в меню параметров разработчика, где вы можете предоставить root-доступ кapps and ADB . Раньше я использовал CM, но поскольку он больше не был разработан, я попытался найти какие-то решения. Хотя CyanogenMod по-прежнему является хорошей альтернативой, поскольку в нем нет вредоносного ПО.

Одна альтернатива, которую я узнал от друга, - это использовать adbd insecureприложение, которое вы можете попробовать отсюда: https://forum.xda-developers.com/showthread.php?t=1687590 . В моем случае он отлично работает с пользовательским ядром Android, но не со стандартным ПЗУ Android (только ванильный Android). Вы также можете попробовать другие альтернативы, такие как изменение boot.imgПЗУ Android.

warfreak92
источник