Andoroi NDK 开发

来源:互联网 发布:儿童编程加盟 编辑:程序博客网 时间:2024/06/02 03:30

如何将现有的C++代码移植到Android?


Android NDK提供了标准的工具包,可以把代码编译成动态库.so供java程序调用。在实际操作中, 有以下注意要点:


1. 对于用VC++写的程序,最好用Clang tool chain,因为它有VC++兼容模式。如果本来代码就是基于Gcc的,那就用Gcc


2. 开发环境的配置:

    有很多选项,

      基于NDK直接开发。 命令行支持,最新的NDK不再需要cgwin

      基于NDK + Android Studio,android studio可以支持调用编译好的.so,或直接编译 C++

                   http://ph0b.com/android-studio-gradle-and-ndk-integration/

                   http://www.shaneenishry.com/blog/2014/08/17/ndk-with-android-studio/


       基于Visual studio开发,有第三方开发者把相关的开发包做成了MSBuild,可以在VS里调用

                   http://code.google.com/p/vs-android/

                   http://android-plus-plus.com/   支持Clang,调试


3. 调试

       总之感觉调试没有好工具,可以用GDB.

       最原始的方法使用 printf,需要把stdut, stderr重定向到logcat一下代码可以做到


      void Java_com_example_nativeaudio_NativeAudio_nativePipeSTDOUTToLogcat(JNIEnv* env, jclass cls)
    {
        int pipes[2];
        pipe(pipes);
        dup2(pipes[1], STDOUT_FILENO);
        FILE *inputFile = fdopen(pipes[0], "r");
        char readBuffer[256];
        while (1) {
            fflush(stdout);
            fgets(readBuffer, sizeof(readBuffer), inputFile);
            // __android_log_write(2, "stdout", readBuffer);
            __android_log_print(ANDROID_LOG_INFO, "Native", readBuffer);
            fflush(stdout);
        }
   

    public class HelloThread extends Thread {

        public void run() {
            System.out.println("Hello from a thread!");
            nativePipeSTDOUTToLogcat();
        }

    }

        logThread = new HelloThread();
        logThread.start();

  


   







0 0
原创粉丝点击