Root-доступ создает новый процесс, поэтому ваше приложение не имеет корневых привилегий.
Единственная вещь, которую вы можете сделать с правами суперпользователя, это выполнить команды, поэтому вы должны знать команды android, многие из которых основаны на Linux, например cp
, ls
и более.
Используйте этот код для выполнения команд и получения вывода:
/**
* Execute command and get entire output
* @return Command output
*/
private String executeCommand(String cmd) throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec("su");
InputStream in = process.getInputStream();
OutputStream out = process.getOutputStream();
out.write(cmd.getBytes());
out.flush();
out.close();
byte[] buffer = new byte[1024];
int length = buffer.read(buffer);
String result = new String(buffer, 0, length);
process.waitFor();
return result;
}
/**
* Execute command and an array separates each line
* @return Command output separated by lines in a String array
*/
private String[] executeCmdByLines(String cmd) throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec("su");
InputStream in = process.getInputStream();
OutputStream out = process.getOutputStream();
out.write(cmd.getBytes());
out.flush();
out.close();
byte[] buffer = new byte[1024];
int length = buffer.read(buffer);
String output = new String(buffer, 0, length);
String[] result = output.split("\n");
process.waitFor();
return result;
}
Использование для файлового менеджера:
Получить список файлов:
for (String value : executeCmdByLines("ls /data/data")) {
//Do your stuff here
}
Прочитать текстовый файл:
String content = executeCommand("cat /data/someFile.txt");
//Do your stuff here with "content" string
Копировать файл (cp
команда не работает на некоторых устройствах):
executeCommand("cp /source/of/file /destination/file");
Удалить файл (rm
команда не работает на некоторых устройствах):
executeCommand("rm /path/to/file");