This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
I'm running JB 4.1.2 on a BeagleBoard-xM but i can't run any root command using Runtime.getRuntime().exec().
I've tried anything but i got:
java.io.IOException: Error running exec(). Command: [echo] Working Directory: null Environment: null
With original /system/xbin/su command, or at least
Permission Denied or no output replacing original "su" command with a custom one (taken from SuperSu or SuperUser application, ARM build).
I've also tried to change "su" command group and permission and running application as a system app.
I've tried any command like "sh -c" "su -c" or libsuperuser (from chainfire) or also using a custom JNI lib that invoke system("su...");
Nothing change, no luck.
su command only works by terminal or through adb shell.
I need to run some echo command to use board leds from my application, how can solve it?
Thanks
The following discussion in the rowboat forum may be of help:
https://groups.google.com/d/topic/rowboat/GYhu3mUSYsI/discussion
Thanks, problem solved. The cause of the issue is that the /system/xbin/su bin does not allow the app root permission, only console user is allowed to execute as root. The solution is to modify su bin.
1. Download Superuser package from git. I used https://github.com/koush/Superuser.
2. You need to install Google NDK package
3. Modify jni/su/su.c using the following code
4. Build using ndk-build (you don't need to build the apk, unless you want the dialog from the Superuser app to ask for root permissions).
5. Install the su bin libs/armeaabi in /system/bin (or replace the su in /system/xbin).
6. Invoke su in your app using /system/bin/su.
=============Code for su.c ======================
#include "utils.h"
static int permissionDenied()
{
printf("su: permission denied\n");
return 1;
}
static int executionFailure(char *context)
{
fprintf(stderr, "su: %s. Error:%s\n", context, strerror(errno));
return -errno;
}
int main(int argc, char *argv[])
{
if(setgid(0) || setuid(0))
return permissionDenied();
char *exec_args[argc + 1];
exec_args[argc] = NULL;
exec_args[0] = "sh";
int i;
for (i = 1; i < argc; i++)
{
exec_args[i] = argv[i];
}
execv("/system/bin/sh", exec_args);
return executionFailure("sh");
}