Первое позволяет нам правильно понять основы. 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
255
не является надежной. Лучше сделать что-нибудь вродеisRooted = (p.exitValue() != 0) ? false : true;
. 03.02.2013