Я хотел бы сначала представить свою ситуацию, я Runtime.getRuntime().exec(...)
твикер ядра, который передает различные команды оболочки, используя Runtime.getRuntime().exec(...)
, он хорошо работает, но проблема в том, что разрешение su запрашивается каждый время Я запускаю команду оболочки с su в ней.
Я хочу, чтобы приложение запрашивало разрешение только один раз, а затем выполняло все команды, не запрашивая su снова. В настоящее время мое приложение имеет около 30 строк с командами su, поэтому пользователь моего приложения должен разрешить su доступ 30 раз, чтобы все работало.
Я решил это, используя тот же интерфейс для моих корневых вызовов в Async Task. Вначале я использовал методы индивидуально, как и когда требуется во Фрагменте, что вызвало необходимость повторного запроса разрешений. Затем Bu, изменив его на один стандартный метод exec и используя его для выполнения системных вызовов каждый раз. Он исправил ошибку.
Один из подходов, который может работать, заключается в том, чтобы запустить оболочку с su и передать ваши различные команды в stdin, как мы надеемся, в результате процесса корневой оболочки. Это означало бы, что su используется только один раз.
Код для этого был рассмотрен много раз здесь в контексте людей, желающих запускать команды с аргументами, которые не могут быть переданы в командной строке su, и поэтому вместо этого должны быть переданы в результирующий процесс.
sudo
... или каком-либо другом решении. Но это не по теме здесь.