Как запустить процесс из приложения для Android с правами ROOT

Как запустить процесс из приложения для Android с правами ROOT?

Я нашел похожие вопросы, но они у меня не работают: 1, 2

Журнал ошибок (IOException при использовании Runtime.getRuntime().exec(commandArray);):

Caused by: java.io.IOException: Error running exec(). Command: [su -c, /data/data/%my_app_package%/%app% %params%] Working Directory: null Environment: null
08-22 11:02:17.515: WARN/System.err(19804): at java.lang.ProcessManager.exec(ProcessManager.java:211)
08-22 11:02:17.515: WARN/System.err(19804): at java.lang.Runtime.exec(Runtime.java:168)
08-22 11:02:17.515: WARN/System.err(19804): at java.lang.Runtime.exec(Runtime.java:123)
08-22 11:02:17.515: WARN/System.err(19804): ... 5 more
08-22 11:02:17.515: WARN/System.err(19804): Caused by: java.io.IOException: Permission denied
08-22 11:02:17.515: WARN/System.err(19804): at java.lang.ProcessManager.exec(Native Method)
08-22 11:02:17.515: WARN/System.err(19804): at java.lang.ProcessManager.exec(ProcessManager.java:209)
08-22 11:02:17.515: WARN/System.err(19804): ... 8 more

Аналогичный вывод ошибки при запуске с использованием ProcessBuilder:

08-22 11:19:34.052: WARN/System.err(22054): Caused by: java.io.IOException: Error running exec(). Command: [su -c, /data/data/%app_package%/%app% %parameters%] Working Directory: null Environment: [ANDROID_SOCKET_zygote=9, ANDROID_BOOTLOGO=1, EXTERNAL_STORAGE=/storage/sdcard0, ANDROID_ASSETS=/system/app, PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin, ASEC_MOUNTPOINT=/mnt/asec, LOOP_MOUNTPOINT=/mnt/obb, BOOTCLASSPATH=/system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework_ext.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar, ANDROID_DATA=/data, LD_LIBRARY_PATH=/vendor/lib:/system/lib, ANDROID_ROOT=/system, ANDROID_PROPERTY_WORKSPACE=8,65536]
08-22 11:19:34.052: WARN/System.err(22054): at java.lang.ProcessManager.exec(ProcessManager.java:211)
08-22 11:19:34.052: WARN/System.err(22054): at java.lang.ProcessBuilder.start(ProcessBuilder.java:195)
08-22 11:19:34.052: WARN/System.err(22054): ... 5 more
08-22 11:19:34.052: WARN/System.err(22054): Caused by: java.io.IOException: Permission denied

Я абсолютно уверен, что устройство рутировано и работает нормально. Иногда меня просят предоставить root-права приложениям. В этом случае меня не спрашивают, просто получаю ошибку.

Как запросить разрешение root для приложения во время выполнения? Предоставляет ли он права root для всех запущенных процессов?


person 4ntoine    schedule 22.08.2013    source источник


Ответы (1)


Существует разница в том, как построить командную строку для процесса для ProcessBuilder:

НЕ рабочий код:

  • commandLine.add("su -c"); commandLine.add("app"); commandLine.add("params")
  • commandLine.add("sudo"); commandLine.add("app"); commandLine.add("params")

РАБОТАЕТ код:

  • commandDownloader.add("su"); commandDownloader.add("-c"); commandLine.add("app");

Для рабочего кода у меня запрашивается разрешение ОС Android (в моем случае MIUI, чтобы быть более подробным)

person 4ntoine    schedule 22.08.2013