以libSDL-1.2.14为例,我们看见这么一些目录和文件:

image

  1. 首先删去不必要的目录和文件
    很显然,像acinclude,build-scripts,docs,test目录根本就不许要被port的;acinclude是为autoconfig用的,build-scripts估计是build libSDL用的,在android下这些工作由Android.mk完成,docs是文档,test估计是测试libSDL的test cases,而且上述列出的.zip文件显然是为不同的编译器准备的,也可以忽略掉.;真正需要关心的目录只有两个:
    • src
    • include
  2. 然后再来看看include和src中的哪些文件需要被port
    • 首先是include/SDL_config.h,需要定义Android特定的头文件,“—DAndroid”是NDK自定义的Local_CFlags,在build/core/build-binary.mk

      /* Add any platform that doesn’t build using the configure system */
      #if defined(__DREAMCAST__)
      #include "SDL_config_dreamcast.h"
      #elif defined(__MACOS__)
      #include "SDL_config_macos.h"
      #elif defined(__MACOSX__)
      #include "SDL_config_macosx.h"
      #elif defined(__SYMBIAN32__)
      #include "SDL_config_symbian.h"  /* must be before win32! */
      #elif defined(__WIN32__)
      #include "SDL_config_win32.h"
      #elif defined(__OS2__)
      #include "SDL_config_os2.h"
      #elif defined(ANDROID)
      #include "SDL_config_android.h"

      #else
      #include "SDL_config_minimal.h"
      #endif /* platform config */

    • SDL_config_android.h
      这是一个根据SDL_config_minimal.h改编的文件,同时可以参照其他平台样例,比如SDL_config_win32.h等
    • SDL_opengl.h,android的头文件所在目录也和其他OS不一样

      #ifdef __WIN32__
      #define WIN32_LEAN_AND_MEAN
      #ifndef NOMINMAX
      #define NOMINMAX    /* Don’t defined min() and max() */
      #endif
      #include <windows.h>
      #endif
      #ifndef NO_SDL_GLEXT
      #define __glext_h_  /* Don’t let gl.h include glext.h */
      #endif
      #if defined(__MACOSX__)
      #include <OpenGL/gl.h>    /* Header File For The OpenGL Library */
      #include <OpenGL/glu.h>    /* Header File For The GLU Library */
      #elif defined(__MACOS__)
      #include <gl.h>        /* Header File For The OpenGL Library */
      #include <glu.h>    /* Header File For The GLU Library */
      #elif defined(ANDROID)
      #include <GLES/gl.h>    /* Header File For The OpenGL Library */
      #include <GLES/glext.h>    /* No GLU on Android */
      #else
      #include <GL/gl.h>    /* Header File For The OpenGL Library */
      #include <GL/glu.h>    /* Header File For The GLU Library */
      #endif
      #ifndef NO_SDL_GLEXT
      #undef __glext_h_
      #endif

    • 再来看看src目录,主要关心video和audio
      image image 
      image image 
      其实还是蛮简单的,共添加了5个文件(蓝色部分),修改了4个文件(红色部分)

       

Advertisements