The problem is that, even though your phone is rooted, the ‘adbd’ server on the phone does not use root permissions. You can try to bypass these checks or install a different adbd on your phone or install a custom kernel/distribution that includes a patched adbd.
Or, a much easier solution is to use ‘adbd insecure’ from chainfire which will patch your adbd on the fly. It’s not permanent, so you have to run it before starting up the adb server (or else set it to run every boot). You can get the app from the google play store for a couple bucks:
https://play.google.com/store/apps/details?id=eu.chainfire.adbd&hl=en
Or you can get it for free, the author has posted a free version on xda-developers:
http://forum.xda-developers.com/showthread.php?t=1687590
Install it to your device (copy it to the device and open the apk file with a file manager), run adb insecure
on the device, and finally kill the adb server on your computer:
% adb kill-server
And then restart the server and it should already be root.
@topjohnwu So much thanks for your Magisk firstly. I have rooted my PIXEL already following your provided method successfully. It looked below when I used command of adb shell
sailfish:/ $ su
sailfish:/ #
However, I still received hint like adbd cannot run as root in production builds after I tried command of adb reboot, even I have downloaded app of adb insecure, and enabled insecure adbd and restarted adb server, it also infoed me adbd cannot run as root in production builds.
How can I do next to fix it?
It is an issue of the adbd insecure app, not mine.
ADB reboot should work without root, not even requiring an unlocked bootloader.
@peyer It’s probably caused by MagiskHide changing ro.debuggable to 0. It needs to be set to 1 for adb root
to work.
You can either disable MagiskHide (and reboot), or change just that prop back to 1 with a boot script or MagiskHide Props Config (it’s in the Magisk repo).
adrmnv, xpgeng, gsy13213009, Alexmego, HackSunil007, and 1180300724wangxurui reacted with thumbs down emoji
@topjohnwu @Didgeridoohan Sorry about reply you so late. I have used MagiskHide Props Config to change ro.debuggable and ro.secure, it still could not work. So I push executable file to /sdcard/ , then copy them to /data/local/tmp.
@topjohnwu @Didgeridoohan Sorry about reply you so late. I have used MagiskHide Props Config to change ro.debuggable and ro.secure, it still could not work. So I push executable file to /sdcard/ , then copy them to /data/local/tmp.
I don’t know how to configure system properties in the config.prop file. I have to change the ro.debuggable value to 1 in the hide_utils.c file. Recompile and flash zip, you can use the adb root command on your computer.
Goto folder path : /Users/RKumar/Library/Android/sdk/tools
Run : adb root
I do get — adbd is already running as root
Note : But still not able to open PROD build, says device comprised. There is a checking in the source code from dev team, requested the new .apk file with disabled rooted device. And able to launch the app on Androd emulator successfully.
API 26 version : Oreo_Android 8.0
@ashu123mae same on my side. I’ve rooted a Pixel 4 (Android 11) using Magisk and hit into the same error: «adbd cannot run as root in production builds». I’ve tried to use adbd insecure app on Google Play but no luck either.
adbd cannot run as root in production builds
@ashu123mae same on my side. I’ve rooted a Pixel 4 (Android 11) using Magisk and hit into the same error: «adbd cannot run as root in production builds». I’ve tried to use adbd insecure app on Google Play but no luck either.
me too
anybody find a useful method?
@ashu123mae same on my side. I’ve rooted a Pixel 4 (Android 11) using Magisk and hit into the same error: «adbd cannot run as root in production builds». I’ve tried to use adbd insecure app on Google Play but no luck either.
me too
me too
@ashu123mae same on my side. I’ve rooted a Pixel 4 (Android 11) using Magisk and hit into the same error: «adbd cannot run as root in production builds». I’ve tried to use adbd insecure app on Google Play but no luck either.
me too
me too
me too
anybody find a useful method?
flash a dev system. example my Pixel 4 flash lineage OS.
@ashu123mae same on my side. I’ve rooted a Pixel 4 (Android 11) using Magisk and hit into the same error: «adbd cannot run as root in production builds». I’ve tried to use adbd insecure app on Google Play but no luck either.
me too
me too
me too
me too
Me too in my FP4 (Android 11)
Me too in my pixel 3 (Android 12)
Any new solution for this?
@ashu123mae same on my side. I’ve rooted a Pixel 4 (Android 11) using Magisk and hit into the same error: «adbd cannot run as root in production builds». I’ve tried to use adbd insecure app on Google Play but no luck either.
me too
me too
me too
me too
me too
@ashu123mae same on my side. I’ve rooted a Pixel 4 (Android 11) using Magisk and hit into the same error: «adbd cannot run as root in production builds». I’ve tried to use adbd insecure app on Google Play but no luck either.
me too
me too
me too
me too
me too
me too
Me too in my pixel 3 (Android 12). After I set the ro.debuggable to 1 by MagiskHidePropsConf, adb root
finally get stuck and expired.
$ adb root restarting adbd as root timeout expired while waiting for device
Me too in my pixel 3 (Android 12). After I set the ro.debuggable to 1 by MagiskHidePropsConf,
adb root
finally get stuck and expired.$ adb root restarting adbd as root timeout expired while waiting for device
Hi folks, I guess I just solved this problem.
- First, I rebuilt the AOSP for pixel3 from scratch.
$ lunch aosp_blueline-userdebug
- Second, I flashed all the things into Pixel3.
- Finally
$ adb root adbd is already running as root
I hope it works for you.
Does anyone have a better plan ? My phonexiao mi mix2 can not do «adb root» ,
I am trying to install Ubuntu Touch on my Galaxy Nexus, but it says adbd cannot run as root in production builds
. I tried a lot of stuff, including a few instructions from Ask Ubuntu, nothing helps. Can anybody please advise on what can be my problem?
NilsB
1,0011 gold badge7 silver badges32 bronze badges
asked Mar 6, 2013 at 14:30
1
You have to unlock your bootloader. Please follow these steps:
Step 2 — Device unlock
- With the device powered off, power on the device by holding the Power button + volume up + volume down.
- The device will boot into the bootloader.
- Plug the device into the computer via the USB cable.
- On your computer, press Ctrl+Alt+T to start a terminal. Type sudo fastboot oem unlock, followed by Enter
- On the device screen, accept the terms of unlocking.
- Boot the device by pressing the power button (pointed by an arrow with Start on the screen).
Source
Please let us know if this worked.
answered Mar 7, 2013 at 12:21
NilsBNilsB
1,0011 gold badge7 silver badges32 bronze badges
3
You could try this:
adb shell setprop ro.secure 0
adb shell setprop ro.debuggable 1
adb shell setprop persist.service.adb.enable 1
adb root
That may work on some devices. Try it yourself and good luck.
answered Feb 5, 2015 at 23:30
2
That error occurs on phone’s that have a production build. You need to get an other android distribution. I would recommend cyanogenmod.
But the people on XDA can help your better. Here’s a link:
Samsung Galaxy Nexus — on XDA
answered Mar 6, 2013 at 14:47
Thomas15vThomas15v
1,5931 gold badge11 silver badges21 bronze badges
If you are following the instructions at https://wiki.ubuntu.com/Touch/Install, the probable reason for the error is that you’re trying to run ‘phablet-flash’ command without having done the bootstrap ‘phablet-flash -b’ first.
answered May 20, 2013 at 8:48
Из песочницы, Разработка мобильных приложений, Flutter, Реверс-инжиниринг, Разработка под Android, Тестирование мобильных приложений
Рекомендация: подборка платных и бесплатных курсов создания сайтов — https://katalog-kursov.ru/
Пролог
Казалось бы, на первый взгляд весьма простая задача. Некоторые читатели могли еще в те бородатые времена лазить по всяким 4пда, рутить свой сенсорный самсунг, менять содержимое файла build.prop и показывать наивным ламерам свой iPhone 15+ Max Pro. Однако, как оказалось, и как оно часто бывает, не все так просто и здесь есть свои подводные камни. Статья призвана помочь простым работягам избежать все кочки да ямы на пути к своей цели!
Дисклеймер
Сразу предупрежу, что люблю писать подобные статьи довольно подробно, не ради объема и многобукав, а ради максимального погружения в проблему и способ ее решения. Обратите внимание, что я работаю на macOS, поэтому все команды в терминале будут ориентированы под данную ОС. Также, следует отметить, что проворачиваю все это для API 30, то есть для самого последнего на момент написания статьи. Как говорят интернеты, сложности по этой теме начались с API 29.
Зачем это нужно?
Предполагаю, что у вас, дорогой читатель, есть на это своя веская причина, иначе не стали бы вы этим заниматься. Наиболее вероятно, что у вас, как и у меня есть программная проверка на модель устройства с которого запущено приложение, примерно как здесь. К слову, таким образом можно будет проверять результат наших трудов. Второй же, и более простой способ проверки модели эмулятора будет через настройки девайса в разделе сведений об устройстве:
Ради контекста вкратце расскажу зачем это понадобилось мне. Я получил .apk с багом где-то внутри приложения. Однако пройти дальше первого экрана в этом приложении я не смог. Дело в том, что при запуске, с сервера приходит список разрешенных для запуска устройств и ни мой народный Ксяоми, ни мой эмулятор в этот список не входит. Вот и додумался поменять имя модели устройства на одно из разрешенных. Рутить свой личный телефон не хотелось, поэтому решил шаманить с эмулятором.
Достаем build.prop
Как уже говорилось в начале статьи, за имя производителя и модель устройства отвечает системный файл build.prop, который находится в корне устройства в папке system/. Однако при попытке просмотреть его, не говоря уже о редактировании, мы получим отказ в доступе:
Для решения этой проблемы необходимо в терминале обратиться к adb и запросить root права следующей командой: adb root
. И вот и первый подводный камень, а именно вывод следующего сообщения: adbd cannot run as root in production builds
. Это из-за того что при создании эмулятора мы выбрали вариант с установленными Google сервисами:
Простое решение — создать эмулятор без установленных Google сервисов, после чего повторить команду adb root
. После чего в консоли должно появиться сообщение: restarting adbd as root
что говорит об успешном проведении операции. Естественно если с самого начала у вас был эмулятор без Google сервисов, то скорее всего с adb root
и выше описанной проблемой вы не столкнулись.
Отлично, теперь мы видим содержимое файла build.prop:
Редактируем build.prop
Сохраним файл build.prop в любое удобное место для дальнейшего редактирования выделенной красным области на скриншоте выше. Я сохранил прямо на рабочий стол:
Вносим необходимые изменения. Просмотрев логи запросов и ответов предоставленного мне .apk я нашел приходящий с сервера список разрешенных устройств. То есть, для моих целей нужно поменять два значения на PIXEL 3A XL (как вы поняли, здесь вы можете указывать необходимую именно вам модель):
Сохраняем изменения и заливаем файл обратно на эмулятор. Делается это при помощи команды adb push (кстати, скачать файл с эмулятора можно при помощи adb pull если у вас вдруг аллергия на GUI).
Вводим команду в терминал: adb push build.prop system/
И получаем ошибку:
adb: error: failed to copy 'build.prop' to 'system/build.prop': remote couldn't create file: Read-only file system
Вот здесь и начинается самое интересное! По умолчанию эмулятор запускается в режиме чтения системных файлов, без возможности делать записи. Следовательно, что либо поменять без прав на запись у нас не выйдет. Для этого нам необходимо запустить эмулятор в ручном режиме с доступом на запись системных файлов.
Запускаем эмулятор с доступом на перезапись системных файлов
Для этого нужно выполнить следующую команду в терминале (чтобы скорее всего получить еще одну ошибку):
emulator -avd Pixel3XLAPI30 -writable-system -no-snapshot -nocache
итак здесь Pixel3XLAPI30 — это название нашего эмулятора который мы будем запускать в режиме записи, получить это имя можно выполнив команду emulator -list-avds
-writable-system — собственно тот самый флаг и виновник торжества.
-no-snapshot -nocache — просто советую ввести чтобы избавиться от любого возможного мусора, который может помешать нашему плану-капкану.
После у нас либо запустится эмулятор (несколько секунд запускается, так что если тупит то так и должно быть) либо получаем ошибку следующего типа:
PANIC: Missing emulator engine program for 'x86' CPU.
БЕЗ ПАНИКИ! Не удивительно, что интернет уже решал подобную проблему.
Что бы и нам решить с этим нужно в файле .bash-profile (или если у вас zsh то в файле .zshenv) находящийся в корне вашего профиля macOS, добавить дополнительные пути. Вот как это выглядит у меня:
export ANDROIDHOME=~/Library/Android/sdk
есть такая переменная ANDROIDHOME и с ее участием редактируем переменную PATH:
export PATH=$ANDROIDHOME/emulator:$ANDROIDHOME/tools:$PATH
Чтобы изменения вступили в силу перезапускаем терминал (или вводим source ~/.bash_profile
) (или source ~/.zshenv
). Результат можно проверить выполнив команду echo $PATH
и убедиться что в переменной PATH появился добавленный нами путь.
Пробуем запустить эмулятор еще раз.
emulator -avd Pixel3XLAPI30 -writable-system -no-snapshot -nocache
Теперь он должен был успешно запустится.
Активируем доступ на перезапись системных файлов
Из описания флага -writable-system:
-writable-system make system & vendor image writable after ‘adb remount’
делаем вывод что теперь нам нужно выполнить adb remount
. Для этого открываем новое окно терминала и выполняем сначала команду adb root
, что бы adb remount
сработало.
После adb remount
, будет сообщение что эмулятор нужно перезапустить. Сделать это можно командой adb reboot. Но и здесь не все так просто. Очередной подводный камень об который мы разбили еще один ноготь на пальцах ног. Если сделать adb reboot
то все просто напросто зависает НАВСЕГДА. Настолько навсегда, что придется удалять эмулятор и создавать его заново. Интернет и с этим столкнулся и даже баг создали на гуглов. И благо нашлось решение. Чтобы эмулятор не зависал нужно добавить пару команд до adb remount
.
Итак по порядку:
-
Делаем
adb root
-
Теперь делаем
adb shell avbctl disable-verification
-
Если вы вдруг остались в shell то введите
exit
-
Перезагружаем эмулятор
adb reboot
и ждем -
Снова делаем
adb root
-
И вот теперь можно делать
adb remount
Ура! Теперь мы можем записывать файлы в системную папку нашего эмулятора. Можем пушнуть наш отредактированный build.prop файл: adb push build.prop system/
. Сделаем adb reboot
и убеждаемся что ничего не поменялось… Имя модели не изменилось…
Редактируем правильный build.prop
Вернемся к началу и заметим, что значения ro.product.product.name и ro.product.product.model не соответствует тому, что отображается в настройках устройства. Изучив структуру системных папок я заметил, что существует несколько файлов build.prop, которые располагаются в папках: system, system_ext, vendor и product. Эмпирическим методом я скачивал, редактировал и пушил обратно каждый из этих файлов. В конце концов ключевым оказался файл в папке product. Отредактировав его я наконец-то смог изменить название модели эмулятора устройства!
Подводим итоги
Наконец-то я смогу запустить приложение и воспроизвести баг. Подумал я…
Теперь я уперся в то, что запускаю приложение якобы с рутованого девайса (ну да есть такой грешок). И дело даже не в команде adb root
, ведь команда adb unroot
не помогла. Что ж, опускать руки уже поздно, придется что-то придумать.
О том, как я обходил проверку на рутованность устройства я расскажу в следующей своей статье. Немного реверс инжиниринга и даже такая популярная библиотека как RootBeer не проблема.
Данной статьей я стремился собрать как можно больше проблем по этому вопросу и изложить все в форме step-by-step. Спасибо за ваше внимание и очень надеюсь, что статья оказалась полезной!