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

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

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

public static final String FACTORY_TEST

С тех пор: API Уровень 1

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

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

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

3 ответа

Решение

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

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

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

Во-первых, давайте разберемся с основами. 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/ каталог. Тогда ваше приложение будет автоматически запускаться с правами суперпользователя (так же, как системные приложения)( подробнее о разделах Android)

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

Другие вопросы по тегам