Как получить 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.