4ntoine
4ntoine

Reputation: 20410

How to launch process from android app with ROOT permissions

How to launch a process from android app with ROOT permissions?

I've found similar questions but they are not working for me: 1, 2

Error log (IOException when using 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

Similar error output when launching using 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

I'm absolutely sure the device is rooted and it works okay. Sometimes i'm asked for granting root permissions to the apps. In this case i'm not asked, just getting error.

How to ask root permission for the app in runtime? Does it grant root permissions for all started processes?

Upvotes: 2

Views: 2776

Answers (1)

4ntoine
4ntoine

Reputation: 20410

There is a difference on how to build command-line for process for ProcessBuilder:

NOT working code:

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

WORKING code:

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

For working code i'm asked for permission by Android OS (MIUI in my case to be more detailed)

Upvotes: 2

Related Questions