Я в основном хочу запустить процесс, который находится в /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");
Я был бы очень признателен, если бы я мог помочь в этом! Я публикую это после много исследований.
Вместо отправки ls \n
на стандартный ввод команды su
попробуйте запустить:
su -c ls
Параметр -c
для su(1)
просит его запустить команду с повышенными привилегиями, а не запускать интерактивную оболочку.
Попробуйте создать файл сценария оболочки (например: init.sh) и напишите в нем следующие команды:
су
перезагружать
Теперь попробуйте выполнить этот сценарий оболочки с помощью Runtime.getRuntime(). Exec ("sh init.sh");
Если этот перезагрузите ваш дроид, вы можете написать свой нужный код в файле init.sh и запустить его.