package com.example.writefile;import android.util.Log;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.InputStreamReader;import java.util.ArrayList;publicclasssuHelper{publicbooleancanRunRootCommands(ArrayList<String> cmds){boolean retval =false;
Process suProcess;try{
suProcess = Runtime.getRuntime().exec("su");
DataOutputStream os =newDataOutputStream(suProcess.getOutputStream());
DataInputStream osRes =newDataInputStream(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");}elseif(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);}for(int i =0; i < cmds.size(); i++){
os.writeBytes(cmds.get(i)+"\n");
os.flush();}if(exitSu){
os.writeBytes("exit\n");
os.flush();}
BufferedReader reader =newBufferedReader(newInputStreamReader(
suProcess.getInputStream()));int read;char[] buffer =newchar[4096];
StringBuffer output =newStringBuffer();while((read = reader.read(buffer))>0){
output.append(buffer,0, read);}
reader.close();
Log.d("ROOT","canRunRootCommands: "+output.toString());}}catch(Exception e){// Can't get root !// Probably broken pipe exception on trying to write to output// stream 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;}}