[原]零基础学习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进行开发了

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

时间: 2024-08-24 10:24:43

[原]零基础学习SDL开发之移植SDL2.0到Android的相关文章

[原]零基础学习SDL开发之在Android使用SDL2.0显示BMP图

关于如何移植SDL2.0到安卓上面来参考我的上一篇文章:[原]零基础学习SDL开发之移植SDL2.0到Android 在一篇文章我们主要使用SDL2.0来加载一张BMP图来渲染显示. 博主的开发环境:Ubuntu 14.04 64位,Eclipse + CDT + ADT+NDK 博主曾经自己使用NDK编译出了libSDL2.so,然后使用共享库的方式来调用libSDL2中的函数,结果发现SDL\src\core\android\SDL_android.c 这个jni函数写的实在是不够自己另外做

[原]零基础学习SDL开发之在Android使用SDL2.0显示BMP叠加图

关于如何移植在android上使用SDL,可以参考[原]零基础学习SDL开发之移植SDL2.0到Android 和 [原]零基础学习SDL开发之在Android使用SDL2.0显示BMP图 . 在一篇文章我们主要使用SDL2.0来加载一张BMP图来渲染显示,同时叠加一张图作为背景图. 博主的开发环境:Ubuntu 14.04 64位,Eclipse + CDT + ADT+NDK 在前面两篇文章我们知道了如何移植SDL2.0到android上面来,并且可以在Android上面来显示一张图片,这篇

[原]零基础学习SDL开发之在Android使用SDL2.0加载字体

在上一篇文章我们知道了如何在android使用SDL2.0来渲染显示一张png图,而且在上上一篇我们知道如何使用sdl来渲染输出bmp图,那么sdl是否可以渲染输出自己喜爱的字体库的字体呢?答案是当然可以. 我们需要移植SDL_ttf字体库来支持相应的字体的渲染输出. 一.移植SDL_ttf库: 使用如下命令,从SDL Mercurial获取SDL_image的源码: hg clone https://hg.libsdl.org/SDL_ttf/ 将SDL_ttf拷贝到在上一篇文章中的andro

[原]零基础学习在Android进行SDL开发系列文章

[原]零基础学习SDL开发之移植SDL2.0到Android [原]零基础学习SDL开发之在Android使用SDL2.0显示BMP图 [原]零基础学习SDL开发之在Android使用SDL2.0显示BMP叠加图 [原]零基础学习SDL开发之在Android使用SDL2.0渲染PNG图片 [原]零基础学习SDL开发之在Android使用SDL2.0加载字体 [原]零基础学习在Android进行SDL开发后记 [原]零基础学习在Android进行SDL开发系列文章,布布扣,bubuko.com

[原]零基础学习在Android进行SDL开发后记

本着学习交流记录的目的编写了这个系列文章,主要用来记录如何从零开始学习SDL开发的过程,在这个过程中遇到了很多问题,差点就放弃了.首先是SDL的Android移植的时候遇到了比较坑的是SDL移植到Android的JNI文件编写比较坑,刚开始想着如何将SDL编译成动态共享库,在别的地方直接调用该动态共享库,结果发现死活崩溃在SDL_Init()这个函数,最后发现SDL的JNI文件直接使用SDLActivity的函数,并且JNI采用静态注册的方式.直接在别的地方调用该动态库就跪了,博主能力又有限,又

[原]零基础学习视频解码系列文章

注:本系列文章的开发环境:Ubuntu 14.04+Eclipse4.3.2+CDT+FFmpeg2.3+SDL1.25 [原]零基础学习视频解码之安装ffmpeg [原]零基础学习视频解码之FFMpeg中比较重要的函数以及数据结构 [原]零基础学习视频解码之解码图像 [原]SDL开发教程 [原]零基础学习视频解码之解码声音 [原]零基础学习视频解码之视频线程 [原]零基础学习视频解码之同步视频 [原]零基础学习视频解码之同步音频 [原]零基础学习视频解码之seek [原]零基础学习视频解码之后

[原]零基础学习视频解码之安装ffmpeg

写在文章前面:ffmpeg是一个开源的编解码框架,拥有很强大的功能.但是对于如果使用其来做开发呈现着严重两极分化,大神们讨论着高深的问题,大多数像我这样的小白连门都进不去.最近无意间领会了如何入门,现在写下这个系列文章<零基础学习视频解码>用来帮大家提供入门基础.博主的开发机器是基于Ubuntu 14.04 64位的,所以这个系列的文章都是在Ubuntu下完成的. 一.安装SDL C语言没有图形库,其中SDL比较小巧,并且是开源的,适合入门者学习.另外安装ffmpeg的时候会检测是否安装SDL

[原]零基础学习视频解码之seek

现在,我们要添加一些功能,当你看不能倒带的电影,是不是很烦? 那么函数av_seek_frame功能看起来是多么赏心悦目. 我们将让左,右箭头来回走在影片中通过一个小的向上和向下箭头很多,其中“三多一少”是10秒,“很多”为60秒.因此,我们需要设置我们的主循环,用来捕获击键.然而,当我们得到一个按键,就不能直接称之为函数av_seek_frame.我们所要做的是在我们的主解码循环中,decode_thread循环做相应的处理. 为了检测按键,我们先来看看,看看我们得到了一个SDL_KEYDOW

[原]零基础学习视频解码之后记

嘿嘿,在此之前从来没有用c写个一个简单的demo,最多也是用c写写数据结构练习题什么的,通过这个学习了解了很多以前不了解的东西. 本人比较懒,做什么事情都是只有三分钟热度,但是一直对ffmpeg解码向往而入门不得.<零基础学习视频解码>系列文章严格意义上来说不算是原创,我无非是将按照http://dranger.com/ffmpeg/这个介绍在Ubuntu 14.04上面用Eclipse+CDT插件去实现了一遍,原文中的很多接口在ffmpeg2.3上面变了,有些接口甚至被删除了,这导致大多数情