2016-11-01 20 views
0

У меня есть пользовательское устройство Android 4.3. Проблема возникает с некоторыми командами, один из примеров:su ведет себя по-разному на adb и по программе

su -c 'pm enable com.android.systemui' 

Когда я запускаю эту команду над adb, она работает. Однако, когда я запускаю код программно, используя библиотеку this, он просто не работает, и ошибка не отображается.

Интересные наблюдения:

Shell.SU.available() : false 
Shell.SU.isSELinuxEnforcing() : false 
+0

через 'adb', вам разрешено выполнять эту команду, даже если ваше устройство не внедрено, но commend не будет работать, если устройство не внедрено независимо от используемой библиотеки. Итак, если физическое устройство действительно внедрено? –

+0

@ th3pat3l, устройство уходит корнями по умолчанию. Таким образом, я могу запускать большинство корневых команд. например, когда я выполняю команду «перезагрузка», это не сработает. Однако, если я выполняю его как перезагрузку корневого устройства. – guness

+0

Я отправил ответ. Посмотрите, поможет ли это вам –

ответ

0

ИТАК устройство укоренились. Любая причина, по которой вы пытаетесь выполнить эту команду, используя эту библиотеку?

Что я пытаюсь сказать, почему вы не можете просто запустить команду оболочки?

runRootCommand метод:

static boolean runRootCommand(String command) { 
    boolean status = true; 
    DataOutputStream os = null; 

    try { 
     Process process = Runtime.getRuntime().exec("su"); 
     os = new DataOutputStream(process.getOutputStream()); 
     os.writeBytes(command + "\n"); 
     os.writeBytes("exit\n"); 
     os.flush(); 
     process.waitFor(); 
    } catch (IOException | InterruptedException e) { 
     Log.e(TAG, e.toString()); 
     status = false; 
    } finally { 
     try { 
      if (os != null) 
       os.close(); 
     } catch (IOException e) { 
      Log.e(TAG, e.toString()); 
      status = false; 
     } 
    } 
    return status; 
} 

И затем вызвать этот метод так:

boolean success = runRootCommand("pm enable com.android.systemui"); 

if(success) { 
    // command was successful 
} else { 
    // command was NOT successful 
} 

Это запустит команду, как "Су" (суперпользователя). Надеюсь, это поможет.

+0

Проблема заключается не в том, как я могу выполнять команды как su. Проблема сама. Вопрос в том, как я могу достичь уровня доступа так же, как и для adb root. – guness

+0

Если ваше устройство укоренилось, у вас уже есть «уровень доступа», который вы ищете. Это просто вопрос правильного пути. Если вы хотите протестировать его, загрузите приложение терминала из магазина воспроизведения и выполните команду. это будет работать. –