How to get root access and execute commands in your Android application ?

Posted by Unknown Minggu, 20 Februari 2011 0 komentar


Well, I've tried executing several commands that required root access in my Android application (AutomateIt) and found several partial solutions online (especially this one), which helped me a lot but were still missing something to make them more robust and reusable.
Since I try making things very generic and easy to use, I constructed a class that handles most of the things required to execute commands from your Android application after getting root privileges. All you need to do is extend this class and implement one simple method that returns a list of all the commands you wish to execute (getCommandsToExecute).

The class also provides a static service that can be used to determine whether the application has root access or not. Note that when calling the static service, it actually requests for root access and returns the result to that request.
public abstract class ExecuteAsRootBase
{
public static boolean canRunRootCommands()
{
boolean retval = false;
Process suProcess;

try
{
suProcess = Runtime.getRuntime().exec("su");

DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());
DataInputStream osRes = new DataInputStream(suProcess.getInputStream());

if (null != os && null != osRes)
{
// Getting the id of the current user to check if this is root
os.writeBytes("id\n");
os.flush();

String currUid = osRes.readLine();
boolean exitSu = false;
if (null == currUid)
{
retval = false;
exitSu = false;
Log.d("ROOT", "Can't get root access or denied by user");
}
else if (true == currUid.contains("uid=0"))
{
retval = true;
exitSu = true;
Log.d("ROOT", "Root access granted");
}
else
{
retval = false;
exitSu = true;
Log.d("ROOT", "Root access rejected: " + currUid);
}

if (exitSu)
{
os.writeBytes("exit\n");
os.flush();
}
}
}
catch (Exception e)
{
// Can't get root !
// Probably broken pipe exception on trying to write to output stream (os) after su failed, meaning that the device is not rooted

retval = false;
Log.d("ROOT", "Root access rejected [" + e.getClass().getName() + "] : " + e.getMessage());
}

return retval;
}

public final boolean execute()
{
boolean retval = false;

try
{
ArrayList<String> commands = getCommandsToExecute();
if (null != commands && commands.size() > 0)
{
Process suProcess = Runtime.getRuntime().exec("su");

DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());

// Execute commands that require root access
for (String currCommand : commands)
{
os.writeBytes(currCommand + "\n");
os.flush();
}

os.writeBytes("exit\n");
os.flush();

try
{
int suProcessRetval = suProcess.waitFor();
if (255 != suProcessRetval)
{
// Root access granted
retval = true;
}
else
{
// Root access denied
retval = false;
}
}
catch (Exception ex)
{
Log.e("ROOT", "Error executing root action", ex);
}
}
}
catch (IOException ex)
{
Log.w("ROOT", "Can't get root access", ex);
}
catch (SecurityException ex)
{
Log.w("ROOT", "Can't get root access", ex);
}
catch (Exception ex)
{
Log.w("ROOT", "Error executing internal operation", ex);
}

return retval;
}
protected abstract ArrayList<String> getCommandsToExecute();
}
TERIMA KASIH ATAS KUNJUNGAN SAUDARA
Judul: How to get root access and execute commands in your Android application ?
Ditulis oleh Unknown
Rating Blog 5 dari 5
Semoga artikel ini bermanfaat bagi saudara. Jika ingin mengutip, baik itu sebagian atau keseluruhan dari isi artikel ini harap menyertakan link dofollow ke https://topandroidnexus7.blogspot.com/2011/02/how-to-get-root-access-and-execute.html. Terima kasih sudah singgah membaca artikel ini.

0 komentar:

Posting Komentar

Trik SEO Terbaru support Online Shop Baju Wanita - Original design by Bamz | Copyright of android nexus 7.