2016-09-17 10 views
2

Я рассмотрел все возможные ответы на эти вопросы, и никто из них не работал на меня. Похоже, что Android очень сильно заблокировал запуск команд оболочки из приложения, даже когда устройство укоренено.Не удается запустить exec («su») на корневом устройстве Android Marshmallow, другие команды работают нормально

я могу сделать су и запускать команды прекрасно от ADB, но я не могу запустить их из самого приложения. Она терпит неудачу с ошибкой:

Error running exec(). Command: [su] Working Directory: null Environment: null 

Я искал эти ошибки и решения работают на старые версии Android, не зефир.

Я также пробовал libsuperuser (SuperSu), но он также терпит неудачу на Зефир.

Другие вещи, которые я пробовал, были, например. для перезагрузки устройства:

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

Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "reboot" }); 

или

PowerManager pm = (PowerManager)... 

То же самое с другими операциями. Команды сработали с ошибкой su. Я не могу отправить команду adb либо из приложения. Но я могу сделать оба отлично в противном случае из командной строки через оболочку adb.

Пример, который Android имеет на своем веб-сайте, также не работает.

Я прочитал об отключении безопасности SELinux и установил его в разрешающем режиме. Но для этого также необходимо запустить su, где приложение не работает.

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

+0

Привет, вам удалось найти решение для этого? У меня такая же проблема ... – NixSam

+0

Нет, мы не могли. Мы отказались от этого. Не было абсолютно никакого способа запустить команду su из приложения. Вероятно, если приложение является частью скомпилированной сборки Android, оно будет работать, но само по себе является сложным и продолжительным процессом. – zeeshan

ответ

0

Необходимо сначала убедиться, что у вас установлен busybox, который установил бы список наиболее часто используемых команд оболочки, а затем используйте следующий код для запуска команды.

Runtime.getRuntime().exec("ls"); 

try { 
    Process chmod = Runtime.getRuntime().exec("/system/bin/chmod 777 " +fileName); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(nfiq.getInputStream())); 

    int read; 
    char[] buffer = new char[4096]; 
    StringBuffer output = new StringBuffer(); 

    while ((read = reader.read(buffer)) > 0) { 
     output.append(buffer, 0, read); 
    } 

    reader.close(); 
    chmod.waitFor(); 
    outputString = output.toString(); 
} catch (IOException e) { 
    throw new RuntimeException(e); 
} catch (InterruptedException e) { 
    throw new RuntimeException(e); 
} 
+0

Может ли BusyBox распространяться как подмодуль приложения? APK приложения будет распространяться более чем на тысячу устройств (а не через Google Play). Его настраиваемый продукт, и мы не можем установить на него несколько APK. – zeeshan

+0

https: // github.com/guardianproject/lildebi перейдите по этой ссылке, если вы согласны с ответом как правильно – siddhesh

+0

busybox не нужен для запуска команд с правами root. У Toolbox и Toybox есть 'ls' и' chmod'. –

0

Попробуйте

Process command = Runtime.getRuntime().exec("su"); 
DataOutputStream dos = new DataOutputStream(p.getOutputStream()); 
dos.writeBytes("-c reboot\n"); 
dos.writeBytes("exit\n"); 
dos.flush(); 
dos.close(); 
p.waitFor(); 

Это может занять некоторое время, чтобы выполнить так у может хочу бежать это на рабочем потоке

+1

Команда Process p = Runtime.getRuntime(). Exec ("su"); сбой с сообщением Ошибка при выполнении exec(). Команда: [su] Рабочий каталог: null Окружающая среда: null – zeeshan

+0

Попробуйте http://googleweblight.com/?lite_url=http://stackoverflow.com/questions/9572025/java-runtime-getruntime-exec-fails-after- call-it-multiple-hundred-times & ei = W8dXmyJb & lc = en-IN & s = 1 & m = 167 & host = www.google.co.in & ts = 1474080938 & sig = AKOVD65C02zBPpL6OGtoanyiFPAGu6hzXw иначе, может быть, ваше приложение имеет некоторые права на разрешение или проблемы с корнем –

+0

Используя adb, я могу сделать su и запустить все команды. Только через приложение это не работает. Я опубликовал свои фрагменты кода, и это работает на устройствах с предварительным Marshmallow. – zeeshan

0

Там нет ничего, что блокирует команды оболочки в «Зефир». Я использую его внутри своего приложения, и все команды работают безупречно. Что-то еще вам не хватает. Сначала подтвердите, что в вашем каталоге «/ system/bin /» присутствуют все файлы. В качестве альтернативы можно проверить другое устройство.

+0

Можете ли вы запустить Process p = Runtime.getRuntime(). Exec ("su"); на укоренившемся Зефире? Если да, можете ли вы опубликовать код, который вы используете? – zeeshan

 Смежные вопросы

  • Нет связанных вопросов^_^