2017-07-07 2 views
1

J'ai une application en ligne de commande (aussi son code source en langage C). Je veux l'utiliser dans ma première application Android.Compilation et communication avec l'application shell sous Android/Java

Voici mes questions:

  1. J'ai un exécutable compilé pour Mac. Dois-je le recompiler pour Android? Si oui, comment?

  2. Est-il possible d'avoir une communication bidirectionnelle avec un exécutable shell dans Java/Android?

Je cherche quelque chose comme:

Runtime.getRuntime().exec(cmd); 

Après beaucoup de googler, cette ligne de code était seule chose que j'ai trouvé. Mais je ne veux pas fermer l'exécutable après chaque appel (il communique avec un serveur sur internet). Voici ce que je veux faire:

1. Open shell executable 
2. write AAA 
3. read line 
4. write BBB 
5. read line 
6. write CCC 
... 
98. write XYZ 
99. read line 
100. close executable 

Notez qu'il n'y a peut-être rien à lire, et il ne devrait pas l'attendre.

Répondre

0
  1. Oui, vous devez le recompiler avec NDK. Comment: vous pouvez trouver plus d'informations sur le site officiel d'Android, où examples également présent.
  2. Oui, il est également possible de le faire, et il existe deux façons existent: a) JNI. Vous devez écrire un wrapper pour votre fonction et compiler une bibliothèque partagée. b) Vous pouvez compiler un fichier exécutable, l'exécuter et communiquer via un flux d'entrée/sortie. Quelque chose comme:

     try { 
         Process pb = Runtime.getRuntime().exec(cmd); 
         String line; 
         BufferedReader input = new BufferedReader(new InputStreamReader(pb.getInputStream())); 
         while ((line = input.readLine()) != null) { 
          System.out.println("Input from your C/C++ app: " + line); 
         } 
         input.close(); 
    
        } catch (IOException e) { 
         e.printStackTrace(); 
        }