2017-07-07 54 views
1

我有一个命令行应用程序(也是C语言的源代码)。我想在我的第一个Android应用程序中使用它。在Android/Java中使用shell应用程序进行编译和通信

这里是我的问题:

  1. 我有一个编译的可执行文件的Mac。我应该重新编译它为Android?如果是,如何?

  2. 是否有可能在Java/Android中与shell中的可执行文件进行双向通信?

我在寻找类似:

Runtime.getRuntime().exec(cmd); 

很多谷歌上搜索后,该行代码只是,我发现事情。但我不想在每次通话后关闭可执行文件(它与Internet上的服务器进行通信)。这是我想要做的:

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 

请注意,可能没有什么可读的,它不应该等待它。

回答

0
  1. 是的,你需要用NDK重新编译它。如何:您可以在官方Android站点上找到更多信息,其中examples也存在。
  2. 是的,它也有可能做到这一点,并且存在两种方法: a)JNI。你需要为你编写一个包装函数,并编译一个共享库。b)你可以编译可执行文件,运行它并通过输入/输出流进行通信。例如:

     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(); 
        } 
    
相关问题