일부 루트 명령을 실행해야하는 앱이 있습니다. SuperSU 버전은 1.04입니다. Su 버전은 1.02입니다. Android 4.1.1. 기기가 Samsung Galaxy S3입니다.SuperSU에서 권한 확인을 얻을 수 없습니다.
문제는 SuperSU에서 권한 요청을받을 수 없다는 것입니다. 많은 것들을 시도했지만 프롬프트가 표시되지 않습니다.
RootChecker basic, ADB 및 기타 앱에 표시됩니다. 내 절차가 있습니다. 어쩌면 내가 잘못하고있는 것일 수도 있습니다.
private static String runShellCommand(String command) {
DataOutputStream os = null;
Process process = null;
try {
String [] env = {"PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin"};
process = Runtime.getRuntime().exec("su", env, Environment.getExternalStorageDirectory());
os = new DataOutputStream(process.getOutputStream());
InputStreamHandler err = new InputStreamHandler(process.getErrorStream(), false);
InputStreamHandler out = new InputStreamHandler(process.getInputStream(), false);
os.writeBytes(command + "\n");
os.flush();
os.writeBytes(EXIT);
os.flush();
os.close();
Log.d(LOGTAG, "Waiting on: " + process.waitFor());
String errOut = err.getOutput();
String stdOut = out.getOutput();
Log.d(LOGTAG, "Exit code: " + process.exitValue());
Log.d(LOGTAG, command + " erroutput: [" + errOut + "]");
Log.d(LOGTAG, command + " output: [" + stdOut + "]");
if (errOut != null && !errOut.equals(""))
return errOut;
else if (stdOut != null&& !stdOut.equals(""))
return stdOut;
else
return null;
} catch (Exception e) {
Log.e(LOGTAG, "runShellCommand error: ", e);
return null;
} finally {
try {
if (os != null) {
os.close();
}
if (process != null) {
Log.d(LOGTAG, "Exit val: " + process.exitValue());
process.destroy();
}
} catch (Exception ignored) {}
}
}
의 InputStream 핸들러는 다음과 같습니다
private static class InputStreamHandler extends Thread {
private final InputStream stream;
private final boolean devNull;
StringBuffer output;
public String getOutput() {
return output.toString();
}
InputStreamHandler(InputStream stream, boolean devNull) {
this.devNull = devNull;
this.stream = stream;
output = new StringBuffer();
start();
}
@Override
public void run() {
try {
if (devNull) {
while (stream.read() != -1) {}
} else {
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
while (true) {
String line = br.readLine();
if (line == null) {
Log.d(LOGTAG, "Ended with reading!");
br.close();
return;
}
output.append(line);
}
}
} catch (IOException ignored) {
Log.e(LOGTAG, "Error", ignored);
}
}
}
사람은 그것이 권한 창을 표시하지 않도록 차단 않는 이유 아이디어가? 감사합니다. .
stderr 및 stdout의 출력은 무엇입니까? –
출력이 없습니다. SuperSU에서 su를 실행하는 것에 대한 허가를받지 못했습니다. –
Odd. SuperSU에서 데이터를 삭제하거나 수퍼 유저를 사용하여 문제의 범위를 좁혀보십시오. –