J'essaie d'exécuter des commandes shell, cela fonctionne comme prévu. Même le résultat revient (comme c'est le cas sur LogCat). Le problème est la dernière ligne du résultat. Chaque fois qu'un readLine() sur la dernière ligne se produit (ce qui ne devrait pas se produire, temp doit être nul), l'application se bloque pour toujours et ne revient pas de l'appel readLine. Peut-être que vous trouvez l'erreur. J'ai essayé readUTF et standart read(), tout le même problème. Et oui, l'application a su-droits.L'obtention du résultat de la commande shell exécutée échoue/se bloque
try
{
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
DataInputStream osRes = new DataInputStream(process.getInputStream());
for (String single : commands) {
os.writeBytes(single + "\n");
os.flush();
String temp = new String();
while( (temp = osRes.readLine()) != null)
{
Log.v("NITRO", temp);
result2 += temp + "\n";
}
}
os.writeBytes("exit\n");
os.flush();
process.waitFor();
} catch (IOException e)
{
Toast.makeText(Main.this, "Error", Toast.LENGTH_LONG);
} catch (InterruptedException e)
{
Toast.makeText(Main.this, "Error", Toast.LENGTH_LONG);
}
C'est le StackTrace où il se bloque lorsque j'arrête débogueur quand la pendaison:
OSFileSystem.readImpl(int, byte[], int, int) line: not available [native method]
OSFileSystem.read(int, byte[], int, int) line: 118
ProcessManager$ProcessInputStream(FileInputStream).read(byte[], int, int) line: 312
ProcessManager$ProcessInputStream(FileInputStream).read() line: 250
DataInputStream.readLine() line: 309
Main$2$1.run() line: 84
ViewRoot(Handler).handleCallback(Message) line: 587
ViewRoot(Handler).dispatchMessage(Message) line: 92
Looper.loop() line: 123
ActivityThread.main(String[]) line: 4627
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 868
ZygoteInit.main(String[]) line: 626
NativeStart.main(String[]) line: not available [native method]
un tir dans le noir ici, essayez de déplacer le 'exit' avant la boucle while? – st0le
Vous devriez adresser votre réponse à @ st0le ou il pourrait ne jamais être vu. –
@ st0le vous avez raison, cela a fonctionné, merci. attrapé cela à partir d'un exemple, là la sortie était après que les commandes. Mais je veux juste exécuter une commande, donc cela devrait fonctionner. Vous pouvez le poster comme réponse, que je peux l'accepter. – ludwigm