Exécution de commandes Shell depuis Android : résolution du problème d'exécution
Lors de la tentative d'exécution de la commande "screenrecord --time-limit 10 /sdcard /MyVideo.mp4" à partir d'une application Java utilisant Runtime.getRuntime().exec(), le fichier vidéo résultant ne parvient pas à être créé. Cela se produit bien que la commande fonctionne correctement lorsqu'elle est exécutée à partir du terminal de l'émulateur d'application.
La cause première de ce problème réside dans le fait que l'exécution de la commande telle quelle à partir de Java attribue l'ID utilisateur actuel (UID) à la commande. , plutôt que d'utiliser les privilèges élevés accordés par la commande su. En conséquence, le fichier n'est pas créé.
Solution : Redirection des E/S du sous-processus
Pour résoudre ce problème, il est nécessaire de rediriger l'entrée standard du processus su à la commande à exécuter. Cela garantit que la commande s'exécute avec les privilèges élevés prévus.
Voici un extrait de code révisé qui implémente cette solution :
try { Process su = Runtime.getRuntime().exec("su"); DataOutputStream outputStream = new DataOutputStream(su.getOutputStream()); outputStream.writeBytes("screenrecord --time-limit 10 /sdcard/MyVideo.mp4\n"); outputStream.flush(); outputStream.writeBytes("exit\n"); outputStream.flush(); su.waitFor(); } catch (IOException e) { throw new Exception(e); } catch (InterruptedException e) { throw new Exception(e); }
En redirigeant le flux d'entrée standard, la commande "screenrecord" est effectivement exécuté sous les privilèges élevés accordés par le processus su, ce qui entraîne une création de fichier réussie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!