[原]零基础学习SDL开发之移植SDL2.0到Android

[原]SDL开发教程我们知道了如何在pc下使用SDL进行开发,在android上面是否一样可以使用呢?答案是肯定的。

下面我们进行移植SDL到Android,这里都是基于SDL最新版进行移植的,在Eclipse中编译。

开发环境:Ubuntu 14.04 64位,Eclipse + CDT + ADT,NDK

一、到官网下载http://www.libsdl.org/hg.php 下载2.0的源码也可以通过hg来clone最新的源码
hg clone http://hg.libsdl.org/SDL

二、编译SDL

进入到下载的文件SDL2-2.0.3中将android-project导入到Eclipse中,进入jni文件夹,新建一个SDL文件,将SDL2-2.0.3\src 、SDL2-2.0.3\include、SDL2-2.0.3\Android.mk文件拷贝到android-project\jni\SDL\中。
 
android-project\jni\SDL\Android.mk文件内容如下:
LOCAL_PATH := $(call my-dir)

###########################
#
# SDL shared library
#
###########################

include $(CLEAR_VARS)

LOCAL_MODULE := SDL2

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)

LOCAL_SRC_FILES := \
    $(subst $(LOCAL_PATH)/,, \
    $(wildcard $(LOCAL_PATH)/src/*.c) \
    $(wildcard $(LOCAL_PATH)/src/audio/*.c) \
    $(wildcard $(LOCAL_PATH)/src/audio/android/*.c) \
    $(wildcard $(LOCAL_PATH)/src/audio/dummy/*.c) \
    $(LOCAL_PATH)/src/atomic/SDL_atomic.c \
    $(LOCAL_PATH)/src/atomic/SDL_spinlock.c.arm \
    $(wildcard $(LOCAL_PATH)/src/core/android/*.c) \
    $(wildcard $(LOCAL_PATH)/src/cpuinfo/*.c) \
    $(wildcard $(LOCAL_PATH)/src/dynapi/*.c) \
    $(wildcard $(LOCAL_PATH)/src/events/*.c) \
    $(wildcard $(LOCAL_PATH)/src/file/*.c) \
    $(wildcard $(LOCAL_PATH)/src/haptic/*.c) \
    $(wildcard $(LOCAL_PATH)/src/haptic/dummy/*.c) \
    $(wildcard $(LOCAL_PATH)/src/joystick/*.c) \
    $(wildcard $(LOCAL_PATH)/src/joystick/android/*.c) \
    $(wildcard $(LOCAL_PATH)/src/loadso/dlopen/*.c) \
    $(wildcard $(LOCAL_PATH)/src/power/*.c) \
    $(wildcard $(LOCAL_PATH)/src/power/android/*.c) \
    $(wildcard $(LOCAL_PATH)/src/filesystem/dummy/*.c) \
    $(wildcard $(LOCAL_PATH)/src/render/*.c) \
    $(wildcard $(LOCAL_PATH)/src/render/*/*.c) \
    $(wildcard $(LOCAL_PATH)/src/stdlib/*.c) \
    $(wildcard $(LOCAL_PATH)/src/thread/*.c) \
    $(wildcard $(LOCAL_PATH)/src/thread/pthread/*.c) \
    $(wildcard $(LOCAL_PATH)/src/timer/*.c) \
    $(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \
    $(wildcard $(LOCAL_PATH)/src/video/*.c) \
    $(wildcard $(LOCAL_PATH)/src/video/android/*.c) \
    $(wildcard $(LOCAL_PATH)/src/test/*.c))

LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES
LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -llog -landroid

include $(BUILD_SHARED_LIBRARY)

###########################
#
# SDL static library
#
###########################

LOCAL_MODULE := SDL2_static

LOCAL_MODULE_FILENAME := libSDL2

LOCAL_SRC_FILES += $(LOCAL_PATH)/src/main/android/SDL_android_main.c

LOCAL_LDLIBS := 
LOCAL_EXPORT_LDLIBS := -Wl,--undefined=Java_org_libsdl_app_SDLActivity_nativeInit -ldl -lGLESv1_CM -lGLESv2 -llog -landroid

include $(BUILD_STATIC_LIBRARY)

在Eclipse中配置NDK, Eclipse->Window->Prefreneces->Android->NDK.

三、如果直接编译的话会提示如下错误

 

fatal error: EGL/egl.h: No such file or directory  

 

查看EGL的支持是在2.3版本以上,所以我们需要添加平台的支持,所以在jni目录修改下Application.mk文件来指定编译平台:

# Uncomment this if you're using STL in your project
# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more information
# APP_STL := stlport_static 

APP_ABI := armeabi armeabi-v7a x86
APP_PLATFORM := android-9

四、在Eclipse中执行Ctrl+B,就会编译出libSDL2.so,编译过程如下:

12:14:54 **** Build of configuration Default for project Android_SDL4 ****
/opt/android-ndk/ndk/ndk-build all 
Compile thumb  : SDL2 <= SDL_assert.c
Compile thumb  : SDL2 <= SDL.c
Compile thumb  : SDL2 <= SDL_error.c
Compile thumb  : SDL2 <= SDL_hints.c
Compile thumb  : SDL2 <= SDL_log.c
Compile thumb  : SDL2 <= SDL_audio.c
Compile thumb  : SDL2 <= SDL_audiocvt.c
Compile thumb  : SDL2 <= SDL_audiodev.c
Compile thumb  : SDL2 <= SDL_audiotypecvt.c
Compile thumb  : SDL2 <= SDL_mixer.c
Compile thumb  : SDL2 <= SDL_wave.c
Compile thumb  : SDL2 <= SDL_androidaudio.c
Compile thumb  : SDL2 <= SDL_dummyaudio.c
Compile thumb  : SDL2 <= SDL_atomic.c
Compile arm    : SDL2 <= SDL_spinlock.c
Compile thumb  : SDL2 <= SDL_android.c
Compile thumb  : SDL2 <= SDL_cpuinfo.c
Compile thumb  : SDL2 <= SDL_dynapi.c
Compile thumb  : SDL2 <= SDL_clipboardevents.c
Compile thumb  : SDL2 <= SDL_dropevents.c
Compile thumb  : SDL2 <= SDL_events.c
Compile thumb  : SDL2 <= SDL_gesture.c
Compile thumb  : SDL2 <= SDL_keyboard.c
Compile thumb  : SDL2 <= SDL_mouse.c
Compile thumb  : SDL2 <= SDL_quit.c
Compile thumb  : SDL2 <= SDL_touch.c
Compile thumb  : SDL2 <= SDL_windowevents.c
Compile thumb  : SDL2 <= SDL_rwops.c
Compile thumb  : SDL2 <= SDL_haptic.c
Compile thumb  : SDL2 <= SDL_syshaptic.c
Compile thumb  : SDL2 <= SDL_gamecontroller.c
Compile thumb  : SDL2 <= SDL_joystick.c
Compile thumb  : SDL2 <= SDL_sysjoystick.c
Compile thumb  : SDL2 <= SDL_sysloadso.c
Compile thumb  : SDL2 <= SDL_power.c
Compile thumb  : SDL2 <= SDL_syspower.c
Compile thumb  : SDL2 <= SDL_sysfilesystem.c
Compile thumb  : SDL2 <= SDL_d3dmath.c
Compile thumb  : SDL2 <= SDL_render.c
Compile thumb  : SDL2 <= SDL_yuv_mmx.c
Compile thumb  : SDL2 <= SDL_yuv_sw.c
Compile thumb  : SDL2 <= SDL_render_d3d11.c
Compile thumb  : SDL2 <= SDL_render_d3d.c
Compile thumb  : SDL2 <= SDL_render_gles2.c
Compile thumb  : SDL2 <= SDL_shaders_gles2.c
Compile thumb  : SDL2 <= SDL_render_gles.c
Compile thumb  : SDL2 <= SDL_render_gl.c
Compile thumb  : SDL2 <= SDL_shaders_gl.c
Compile thumb  : SDL2 <= SDL_render_psp.c
Compile thumb  : SDL2 <= SDL_blendfillrect.c
Compile thumb  : SDL2 <= SDL_blendline.c
Compile thumb  : SDL2 <= SDL_blendpoint.c
Compile thumb  : SDL2 <= SDL_drawline.c
Compile thumb  : SDL2 <= SDL_drawpoint.c
Compile thumb  : SDL2 <= SDL_render_sw.c
Compile thumb  : SDL2 <= SDL_rotate.c
Compile thumb  : SDL2 <= SDL_getenv.c
Compile thumb  : SDL2 <= SDL_iconv.c
Compile thumb  : SDL2 <= SDL_malloc.c
Compile thumb  : SDL2 <= SDL_qsort.c
Compile thumb  : SDL2 <= SDL_stdlib.c
Compile thumb  : SDL2 <= SDL_string.c
Compile thumb  : SDL2 <= SDL_thread.c
Compile thumb  : SDL2 <= SDL_syscond.c
Compile thumb  : SDL2 <= SDL_sysmutex.c
Compile thumb  : SDL2 <= SDL_syssem.c
Compile thumb  : SDL2 <= SDL_systhread.c
Compile thumb  : SDL2 <= SDL_systls.c
Compile thumb  : SDL2 <= SDL_timer.c
Compile thumb  : SDL2 <= SDL_systimer.c
Compile thumb  : SDL2 <= SDL_blit_0.c
Compile thumb  : SDL2 <= SDL_blit_1.c
Compile thumb  : SDL2 <= SDL_blit_A.c
Compile thumb  : SDL2 <= SDL_blit_auto.c
Compile thumb  : SDL2 <= SDL_blit.c
Compile thumb  : SDL2 <= SDL_blit_copy.c
Compile thumb  : SDL2 <= SDL_blit_N.c
Compile thumb  : SDL2 <= SDL_blit_slow.c
Compile thumb  : SDL2 <= SDL_bmp.c
Compile thumb  : SDL2 <= SDL_clipboard.c
Compile thumb  : SDL2 <= SDL_egl.c
Compile thumb  : SDL2 <= SDL_fillrect.c
Compile thumb  : SDL2 <= SDL_pixels.c
Compile thumb  : SDL2 <= SDL_rect.c
Compile thumb  : SDL2 <= SDL_RLEaccel.c
Compile thumb  : SDL2 <= SDL_shape.c
Compile thumb  : SDL2 <= SDL_stretch.c
Compile thumb  : SDL2 <= SDL_surface.c
Compile thumb  : SDL2 <= SDL_video.c
Compile thumb  : SDL2 <= SDL_androidclipboard.c
Compile thumb  : SDL2 <= SDL_androidevents.c
Compile thumb  : SDL2 <= SDL_androidgl.c
Compile thumb  : SDL2 <= SDL_androidkeyboard.c
Compile thumb  : SDL2 <= SDL_androidtouch.c
Compile thumb  : SDL2 <= SDL_androidvideo.c
Compile thumb  : SDL2 <= SDL_androidwindow.c
Compile thumb  : SDL2 <= SDL_test_assert.c
Compile thumb  : SDL2 <= SDL_test_common.c
Compile thumb  : SDL2 <= SDL_test_compare.c
Compile thumb  : SDL2 <= SDL_test_crc32.c
Compile thumb  : SDL2 <= SDL_test_font.c
Compile thumb  : SDL2 <= SDL_test_fuzzer.c
Compile thumb  : SDL2 <= SDL_test_harness.c
Compile thumb  : SDL2 <= SDL_test_imageBlitBlend.c
Compile thumb  : SDL2 <= SDL_test_imageBlit.c
Compile thumb  : SDL2 <= SDL_test_imageFace.c
Compile thumb  : SDL2 <= SDL_test_imagePrimitivesBlend.c
Compile thumb  : SDL2 <= SDL_test_imagePrimitives.c
Compile thumb  : SDL2 <= SDL_test_log.c
Compile thumb  : SDL2 <= SDL_test_md5.c
Compile thumb  : SDL2 <= SDL_test_random.c
SharedLibrary  : libSDL2.so
Install        : libSDL2.so => libs/armeabi/libSDL2.so
Compile thumb  : main <= SDL_android_main.c
Compile thumb  : main <= SDL_Lesson.c
SharedLibrary  : libmain.so
Install        : libmain.so => libs/armeabi/libmain.so

12:15:40 Build Finished (took 45s.806ms)

 

后面我们就可以来使用sdl进行开发了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SDL2.2.0.1的移植,包含SDL的每个参数的意思,包含交叉编译器的安装,包含移植过程中出错的处理方法。 --prefix=/usr/arm 安装SDL路径 --enable-shared=yes 构建共享库[开启] --enable-nasm 装配blitters x86上的nasm(汇编器) --enable-oss 启用支持oss声音的API --enable-alsa 启用支持ALSA声音的API --enable-alsa-shared 启用动态加载ALSA声卡的API --enable-pulseaudio 启用pulseaudio(脉冲音频) --enable-pulse-shared 启用动态加载脉冲音频支持 --enable-arts 启用支持Analog Read Time Synthesizer(模拟实时合成器) --enable-arts-shared 启用动态加载ARTS声卡的支持 --enable-joystick 启用joystick(控制杆)系统 --enable-cdrom 启用只读光盘系统[关闭] --enable-threads 启用多线程子系统 --enable-timers 启用计时器子系统 --enable-endian 大小端设置 --enable-file 启用文件系统 --enable-esd 支持Enlightened(文明)声音后台程序 --enable-nas 支持NAS(网络连接存储)声卡API --enable-diskaudio 支持磁盘写入声卡驱动 --enable-dummyaudio 支持虚拟声卡驱动 --enable-altivec 使用altivec装配位块传送器在PPC上 --enable-video-x11 使用x11视频驱动 --enable-dga 允许使用x1 DGA代码 --enable-video-x11-vm 使用x11 vm延长全屏 --enable-video-x11-dgamouse 使用x11 DGA鼠标事件 --enable-video-x11-xv 使用x11 xv音像延长视频 --enable-video-x11-xinerama 启动x11多银幕支持 --enable-video-dga 使用DGA2.0视频驱动 --enable-video-directfb 启用DirectFB视频驱动 --enable-video-photon 使用QNX(嵌入式实时系统)光子视频驱动 --enable-video-ps2gs 使用PS(游戏机)2 GS视频驱动 --enable-video-opengl 包括OpenGL(开放图形语言)创建上下文 --enable-video-pth 使用GNU pth库对多线程 --enable-pthreads 使用POSIX线程(可移植操作系统)对多线程 --enable-pthread-sem 使用多线程信号 --enable-input-events 使用Linux-2.4统一输入接口 --enable-input-tslib 使用Touchscreen库输入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值