Выполнение команд на основе root-доступа в приложении Android

1

Я в основном хочу запустить процесс, который находится в /system/bin/... из команды java. Я пробовал все типы параметров Runtime.process.exec() Пробовал комбинацию su и ouputStream, но ничто не может запустить приложение. Я использую код в устройстве и эмуляторах, не повезло в обоих. Я могу успешно запускать те же команды из ADB Shell (поскольку у него есть права root).

Устройство укоренилось, я могу видеть #, когда я использую adb для отладки моего устройства, и он также может перейти в su через adb. основанный на моем поиске, я обнаружил, что (после выполнения ps из оболочки adb) я могу запустить любую команду с разрешением lrwz-x-x, например (ls-> toolbox, ps-> toolbox) из прикладного уровня но я не могу выполнять любые другие команды, которые не связаны с панелью инструментов.

Это не выполняется. ls:

Process p = Runtime.getRuntime().exec("su");
DataOutputStream os=new DataOutputStream(p.getOutputStream());
os.writeBytes("ls \n");
os.flush();

Но это выполняет ls:

Process p = Runtime.getRuntime().exec("ls");

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

  • 0
    Какие сообщения об ошибках, коды ошибок или исключения вы получаете при попытке выполнения программ?
  • 0
    Вы подтвердили в своем приложении SuperUser, что указанному приложению разрешен доступ 'su'. Я уверен, что SuperUser хранит список приложений в черном списке, может быть, вы в какой-то момент занесли его в черный список
Показать ещё 3 комментария
Теги:
adb

2 ответа

1

Вместо отправки ls \n на стандартный ввод команды su попробуйте запустить:

su -c ls

Параметр -c для su(1) просит его запустить команду с повышенными привилегиями, а не запускать интерактивную оболочку.

  • 0
    это тоже не работает
0

Попробуйте создать файл сценария оболочки (например: init.sh) и напишите в нем следующие команды:

су

перезагружать

Теперь попробуйте выполнить этот сценарий оболочки с помощью Runtime.getRuntime(). Exec ("sh init.sh");

Если этот перезагрузите ваш дроид, вы можете написать свой нужный код в файле init.sh и запустить его.

  • 0
    Я пытался это, но он не выполняется :(
  • 0
    попробуйте пример из этой ссылки. Это может помочь вам понять, что на самом деле идет не так.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню