Java 从智能手机上的命令行终端测试Android NDK

Java 从智能手机上的命令行终端测试Android NDK,java,android,android-ndk,java-native-interface,smartphone,Java,Android,Android Ndk,Java Native Interface,Smartphone,我有一个C库,我正试图在Android智能手机上使用它 我已经在使用SWIG包装库API方面取得了一些初步成功,这样我就可以从Java调用本机C函数(SWIG为我自动生成所有C和javajni代码) 因此,我可以在x86笔记本电脑上编写Java应用程序,并让它调用本机共享库 我的下一步是使用Android NDK为我的目标智能手机平台(可能是ARM)创建一个本地共享库 最终,我将开发一个Android GUI与库接口 但作为一项临时措施,是否有可能从智能手机的终端运行Java应用程序 这将允许我

我有一个C库,我正试图在Android智能手机上使用它

我已经在使用SWIG包装库API方面取得了一些初步成功,这样我就可以从Java调用本机C函数(SWIG为我自动生成所有C和javajni代码)

因此,我可以在x86笔记本电脑上编写Java应用程序,并让它调用本机共享库

我的下一步是使用Android NDK为我的目标智能手机平台(可能是ARM)创建一个本地共享库

最终,我将开发一个Android GUI与库接口

但作为一项临时措施,是否有可能从智能手机的终端运行Java应用程序

这将允许我在下一步编写Android GUI之前,使用我在智能手机笔记本电脑上使用的相同Java“Harnese”应用程序,看看它是否有效

更新

我忘了,虽然android使用java语言,但它不使用java字节码——它的dalvik捆绑在一个.apk中,所以我的想法是能够打开一个终端并运行java工具,例如

$ java harness
没有任何意义


我确实发现google app store中有一个Android终端仿真器(Jack Palevich),但不确定如何将其安装到avd Emulator上(我目前没有智能手机)

我想你可以测试Android.os.Exec.createSubprocess()api。 演示代码:

Class<?> execClass = Class.forName("android.os.Exec");
    Method createSubprocess = execClass.getMethod("createSubprocess", String.class, String.class, String.class, int[].class);
    int[] pid = new int[1];
    FileDescriptor fd = (FileDescriptor)createSubprocess.invoke(null, "/system/bin/yourexecfile", "/", null, pid);

    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fd)));
    String output = "";
    try {
        String line;
        while ((line = reader.readLine()) != null) {
            output += line + "\n";
        }
    }
    catch (IOException e) {}
Class-execClass=Class.forName(“android.os.Exec”);
方法createSubprocess=execClass.getMethod(“createSubprocess”,String.class,String.class,String.class,int[].class);
int[]pid=新的int[1];
FileDescriptor fd=(FileDescriptor)createSubprocess.invoke(null,“/system/bin/yourexecfile”、“/”,null,pid);
BufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream(fd));
字符串输出=”;
试一试{
弦线;
而((line=reader.readLine())!=null){
输出+=行+“\n”;
}
}
捕获(IOE){}
路径“/system/bin”可以使用。但我不确定其他路径,但您可以测试。 祝你好运 ^-^