Adb cannot run as root in production builds как исправить

I have an Android-based phone (2.3.6) with unlocked root privileges. Since i'd like to have access to my phone through my computer, today i've installed QtAdb and Android SDK. If i open a command p...

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.

@peyer

@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?

@topjohnwu

It is an issue of the adbd insecure app, not mine.
ADB reboot should work without root, not even requiring an unlocked bootloader.

@Didgeridoohan

@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).

nlburgin, deveshm, specters312, trochdewei, Enigma3000, 1180300724wangxurui, aliyin, and delicacyyy reacted with thumbs up emoji
adrmnv, xpgeng, gsy13213009, Alexmego, HackSunil007, and 1180300724wangxurui reacted with thumbs down emoji

@peyer

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

@yuhuazhu

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

@ashu123mae

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

@avelyne

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

@bsed

adbd cannot run as root in production builds

@matianhe3

@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

@xzhan96

anybody find a useful method?

@xzhan96

@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

@meichen8050753

@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

@nazmul91977

@matianhe3

anybody find a useful method?

flash a dev system. example my Pixel 4 flash lineage OS.

@caseone

@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

@cortomalese

Me too in my FP4 (Android 11)

@Alexmego

Me too in my pixel 3 (Android 12)

@themarkib

Any new solution for this?

@sssupercoder

@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

@xiaoxiaocainiao

@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

@XiaZhouZero

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

@XiaZhouZero

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. ;)

@bozheng946448185

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's user avatar

NilsB

1,0011 gold badge7 silver badges32 bronze badges

asked Mar 6, 2013 at 14:30

dukenuker's user avatar

1

You have to unlock your bootloader. Please follow these steps:

Step 2 — Device unlock

  1. With the device powered off, power on the device by holding the Power button + volume up + volume down.
  2. The device will boot into the bootloader.
  3. Plug the device into the computer via the USB cable.
  4. On your computer, press Ctrl+Alt+T to start a terminal. Type sudo fastboot oem unlock, followed by Enter
  5. On the device screen, accept the terms of unlocking.
  6. 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

NilsB's user avatar

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.

alexgophermix's user avatar

answered Feb 5, 2015 at 23:30

Steven's user avatar

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

Thomas15v's user avatar

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

Timo Jyrinki's user avatar

Из песочницы, Разработка мобильных приложений, 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

Итак по порядку:

  1. Делаем adb root

  2. Теперь делаем adb shell avbctl disable-verification

  3. Если вы вдруг остались в shell то введите exit

  4. Перезагружаем эмулятор adb reboot и ждем

  5. Снова делаем adb root 

  6. И вот теперь можно делать 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. Спасибо за ваше внимание и очень надеюсь, что статья оказалась полезной!

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Acura ошибка tpms
  • Activision unlink account system error please refresh the page and try again
  • Activex control is not registered как исправить
  • Activex component can t create object 429 как исправить
  • Activex com как очистить ошибок

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии