2015-03-25 1 views
0

J'essaie d'utiliser le apktool à partir d'un programme Java. J'utilise ceci pour créer un service Web. Cependant, cette commande ne s'exécute pas sur le shell à partir du programme Java.Impossible d'exécuter la commande apktool sur le shell à partir de Java

String cmd = "apktool d /home/ridhima/Test.apk" ; 
try { 
    Process p = Runtime.getRuntime().exec(cmd); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line = ""; 
    while((line = reader.readLine()) != null) 
    { 
     System.out.print(line + "\n"); 
    } 
    p.waitFor(); 
} 
catch (IOException | InterruptedException e1) { 
     e1.printStackTrace(); 
} 

La commande fonctionne parfaitement bien directement à partir du shell.

Répondre

0

Vous devriez peut-être attendre que le processus pour compléter

String cmd = "apktool d /home/ridhima/Test.apk" ; 
try { 
    Process p = Runtime.getRuntime().exec(cmd); 
    // You maybe should wait for the process to complete 
    p.waitFor(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line = ""; 
    while((line = reader.readLine()) != null) 
    { 
     System.out.print(line + "\n"); 
    } 

} 
catch (IOException | InterruptedException e1) { 
     e1.printStackTrace(); 
} 

Ou vous pouvez utiliser ProcessBuilder pour la même tâche

public class Main { 
    public static void main(String[] args) throws java.io.IOException, java.lang.InterruptedException { 
     // Create ProcessBuilder instance for UNIX command ls -l 
     java.lang.ProcessBuilder processBuilder = new java.lang.ProcessBuilder("ls", "-l"); 
     // Create an environment (shell variables) 
     java.util.Map env = processBuilder.environment(); 
     env.clear(); 
     env.put("COLUMNS", "3"); 
     processBuilder.directory(new java.io.File("/Users")); 
     java.lang.Process p = processBuilder.start(); 
    } 
} 
0

Merci, mais il fonctionne très bien maintenant. Comme apktool est un script wrapper, il n'est probablement pas reconnu par le programme java. Extraire le fichier apktool.jar fonctionne directement.

try { 
     ProcessBuilder pb = new ProcessBuilder("/home/ridhima/java/jdk1.8.0/bin/java", "-jar", "apktool.jar","d","test.apk"); 
     Process p = pb.start(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     while((line = reader.readLine()) != null) { 
      System.out.print(line + "\n"); 
     } 
     p.waitFor(); 
    }catch (IOException | InterruptedException e1) { 
     e1.printStackTrace(); 
    }