Хобрук: Ваш путь к мастерству в программировании

Как я могу получить права root через Android SDK?

Я изучаю программирование на Android и хочу создать приложение, которое должно запускаться от имени пользователя root. Логичным было бы добавить root-права в Android Manifest.

Я видел эту ссылку в документации и особо отмечал разрешение FACTORY_TEST:

public static final String FACTORY_TEST

Начиная с: API уровня 1

Запустите как тестовое приложение производителя, работающее от имени пользователя root. Доступно только тогда, когда устройство работает в тестовом режиме производителя. Постоянное значение: "android.permission.FACTORY_TEST"

Это лучший способ?

Если использовать SDK невозможно, как мне заставить работать "корневое" приложение?


  • Обратите внимание, что хотя на этот вопрос есть ответ с большим количеством положительных голосов, этот ответ неверен и бесполезен, а механизмы, на которые он неточно намекает, сами давно удалены. Это ничего не дает и возникает из-за фундаментального непонимания ядра Linux, безопасности и модели процессов Unix, на которых полагается Android. 28.05.2016

Ответы:


1

Что вам нужно сделать, это что-то вроде:

Process root = Runtime.getRuntime().exec("su");

Это вызывает отображение SuperUser, что позволяет вам либо разрешить, либо заблокировать его от root-доступа. Этот подход может не работать, если у пользователя нет root-прав. Вот способ Вы можете это проверить.

14.03.2011
  • При этом само приложение не запускается от имени пользователя root. В системах, которые его поддерживают, это позволяет приложению запускать вспомогательную программу в новом процессе, который выполняется от имени пользователя root. Кроме того, показанный выше код почти ничего не делает, поскольку рабочий процесс не запускается. Все, что это может сделать, - это показать диалоговое окно подтверждения пользователя одного из отстойных взломов и, возможно, кэшировать выбор пользователя, чтобы его больше не спрашивали, выполняется ли еще один вызов su. Но пока еще ничего не запускается от root. 28.12.2012
  • Согласитесь с приведенным выше комментарием Криса - вам понадобится рабочий процесс для запуска и получения результата от этого процесса, чтобы определить, есть ли у вас права root или нет. 03.02.2013
  • @Mohit: ссылка Вы опубликовали не во всех ситуациях. Проверка на 255 не является надежной. Лучше сделать что-нибудь вроде isRooted = (p.exitValue() != 0) ? false : true;. 03.02.2013

  • 2

    Первое позволяет нам правильно понять основы. Android запускает ядро ​​Linux под ним. Теперь, если вам нужно запустить свой процесс на нем с привилегиями суперпользователя (запустить его как root), единственный способ - выполнить ваш процесс через command line, потому что это единственный способ напрямую взаимодействовать с ядром. Также вам нужно использовать su перед запуском любой команды. Также, как упомянул Крис в своем комментарии к 1-му ответу

    Process process = Runtime.getRuntime().exec("su");
    

    почти ничего не добьется. Он просто запросит привилегию суперпользования в диалоговом окне. Что вы можете сделать, так это вместо того, чтобы просто выполнять su, вы можете выполнить свой процесс с помощью su следующим образом

    Process process = Runtime.getRuntime().exec(new String[] { "su", "-c", yourCommand});
    

    Параметр -c

    Среди немногих наиболее часто используемых параметров su - -c, указывающая su to execute the command that directly follows it on the same line. Такая команда выполняется от имени нового пользователя, а затем окно терминала или консоль, из которой был запущен su, немедленно возвращается в учетную запись бывшего пользователя после того, как команда завершила выполнение или после того, как любая запущенная программа была закрыта. (Подробнее)

    Альтернативный вариант

    Альтернатива вышеуказанному методу. Другой способ, который может работать, - использовать командную строку для копирования вашего приложения в каталог /system/app/. Тогда ваше приложение будет запускаться автоматически с привилегиями root (так же, как и системные приложения).

    28.12.2013
  • Нет, приложения в / system / app также не запускаются от имени пользователя root. Они могут получить больше разрешений на уровне Android, но по-прежнему не имеют root-прав. 20.05.2014
  • Для того, чтобы использовать root, вы должны подписаться с помощью системного сертификата. Как сказал Крис, обходные пути, такие как размещение приложения в / system / app или запуск su, НЕ заставят ваше приложение запускаться от имени пользователя root. 03.10.2014
  • @flicflac Я думаю, что подпись с помощью системного сертификата все еще не заставляет ваше приложение работать от имени пользователя root. Это только дает вам больше разрешений (уровень Android). Или я не прав? Спасибо! 17.11.2016

  • 3

    SDK не позволяет запускать приложение от имени пользователя root.

    14.03.2011
  • Хорошо, мистер Гугл :) Я должен переформулировать свой вопрос. Как сделать так, чтобы приложение работало под root? 14.03.2011
  • @Rob - нельзя. В большинстве случаев вспомогательные процессы могут запускаться от имени пользователя root, но не сами приложения. 28.05.2016
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...