关于将SDL及其扩展库移植到Android平台的一些看法
2013-08-30 00:44
459 查看
关于将SDL及其扩展库移植到Android平台的一些看法
从SDL1.3开始,已经官方支持SDL到Android移植,一个显著的标志是提供了可以通过NDK编译的Android.mk文件。文件中指明了SDL在Android平台工作需要编译那些文件,以及其他的一些编译规则。你可以到SDL的官网下载源码自己编译。编译方法在 SDL-1.3\jni\README.android内说的很清楚,显然SDL官方在这一点上做的很好,提供了各种平台以及不同的编译环境下的自述文件,让各色开发者可以找到适合自己的编译方法,但文件太多也容易造成干扰,当然这种干扰不是技术上的,而是耐心上的,不过事实证明,耐心上的缺陷才是致命的,它可能是造成失败的根本原因。
这里稍微讲一下移植的方法:
首先你要得到这样一个目录结构
android-project
|-jni
| |-src
| |-Android.mk
| \
|-res
|-src
|-AndroidManifest.xml
|-build.xml
|-build.properties
|-local.properties
\
这里我们真正关心的是jni文件夹。在你下载到的SDL源码压缩包(假设是SDL-1.3)解压以后,SDL-1.3\jni路径下就包含了上面的那个android-project文件夹。我们需要把它复制出来,放到如意路径下,如f:\android-project,再到SDL-1.3\jni下把SDL文件夹复制出来,放到
f:\android-project下,这样在f:\android-project里就是这样的结构
android-project
|-jni
| |-src
| |-Android.mk①
| |-SDL-|-(源码,文档,配置文件,其他)
| |
|-Android.mk②
| \ \
|-res
|-src
|-AndroidManifest.xml
|-build.xml
|-build.properties
|-local.properties
\
可以看到上面有两处Android.mk文件,这是保证移植成功的一个关键。①很简单里面只有一句:include $(call all-subdir-makefiles),这表示执行它所在目录下所有子目录内的Android.mk,也就是说,是它“启动”了②,而②才是真正编译SDL的所在,②里包括了应该编译什么文件,最终生成什么模块等等。当然①意义不止于此,它几乎可以说是一个“模板”,因为当你想将别的什么C/C++项目集成进进来,只需在\jni目录下建立相应的子文件夹,然后为你要集成的项目编写一个合适的Android.mk就可以了。所有如果你要移植SDL_image,那么你只需得到下面一个结构:
android-project
|-jni
| |-src
| |-Android.mk①
| |-SDL-|-(源码,文档,配置文件,其他)
| | |-Android.mk②
| | \
| |
| |-SDL_image-|-(源码,文档,配置文件,其他)
| \ |-Android.mk
| \
|-res
|-src
|-AndroidManifest.xml
|-build.xml
|-build.properties
|-local.properties
\
然后用Cygwin对这个项目用ndk-build即可,其他的SDL扩展库或其他C/C++项目以此类推。
至此,你在移植SDL及其扩展库时唯一需要做的就是去修改源代码中与Android平台不相适应的代码以及编写一个合适的Android.mk文件,而如何编译它们已不再是一个问题。最后强调一点还是耐心,因为技术终有提高之时,而有恒心有耐心决定了一个人能走多远。
(PS:以上只是小弟个人愚见,其中错漏望大家不吝指出,有任何疑问也可提出,大家共同探讨,谢谢)
从SDL1.3开始,已经官方支持SDL到Android移植,一个显著的标志是提供了可以通过NDK编译的Android.mk文件。文件中指明了SDL在Android平台工作需要编译那些文件,以及其他的一些编译规则。你可以到SDL的官网下载源码自己编译。编译方法在 SDL-1.3\jni\README.android内说的很清楚,显然SDL官方在这一点上做的很好,提供了各种平台以及不同的编译环境下的自述文件,让各色开发者可以找到适合自己的编译方法,但文件太多也容易造成干扰,当然这种干扰不是技术上的,而是耐心上的,不过事实证明,耐心上的缺陷才是致命的,它可能是造成失败的根本原因。
这里稍微讲一下移植的方法:
首先你要得到这样一个目录结构
android-project
|-jni
| |-src
| |-Android.mk
| \
|-res
|-src
|-AndroidManifest.xml
|-build.xml
|-build.properties
|-local.properties
\
这里我们真正关心的是jni文件夹。在你下载到的SDL源码压缩包(假设是SDL-1.3)解压以后,SDL-1.3\jni路径下就包含了上面的那个android-project文件夹。我们需要把它复制出来,放到如意路径下,如f:\android-project,再到SDL-1.3\jni下把SDL文件夹复制出来,放到
f:\android-project下,这样在f:\android-project里就是这样的结构
android-project
|-jni
| |-src
| |-Android.mk①
| |-SDL-|-(源码,文档,配置文件,其他)
| |
|-Android.mk②
| \ \
|-res
|-src
|-AndroidManifest.xml
|-build.xml
|-build.properties
|-local.properties
\
可以看到上面有两处Android.mk文件,这是保证移植成功的一个关键。①很简单里面只有一句:include $(call all-subdir-makefiles),这表示执行它所在目录下所有子目录内的Android.mk,也就是说,是它“启动”了②,而②才是真正编译SDL的所在,②里包括了应该编译什么文件,最终生成什么模块等等。当然①意义不止于此,它几乎可以说是一个“模板”,因为当你想将别的什么C/C++项目集成进进来,只需在\jni目录下建立相应的子文件夹,然后为你要集成的项目编写一个合适的Android.mk就可以了。所有如果你要移植SDL_image,那么你只需得到下面一个结构:
android-project
|-jni
| |-src
| |-Android.mk①
| |-SDL-|-(源码,文档,配置文件,其他)
| | |-Android.mk②
| | \
| |
| |-SDL_image-|-(源码,文档,配置文件,其他)
| \ |-Android.mk
| \
|-res
|-src
|-AndroidManifest.xml
|-build.xml
|-build.properties
|-local.properties
\
然后用Cygwin对这个项目用ndk-build即可,其他的SDL扩展库或其他C/C++项目以此类推。
至此,你在移植SDL及其扩展库时唯一需要做的就是去修改源代码中与Android平台不相适应的代码以及编写一个合适的Android.mk文件,而如何编译它们已不再是一个问题。最后强调一点还是耐心,因为技术终有提高之时,而有恒心有耐心决定了一个人能走多远。
(PS:以上只是小弟个人愚见,其中错漏望大家不吝指出,有任何疑问也可提出,大家共同探讨,谢谢)
相关文章推荐
- 关于选择移动开发平台(android,ios,wp7)的一些看法
- 关于选择移动开发平台(android,ios,wp7)的一些看法
- SDL/VLC等在移植到Android平台
- Intellij idea移植Cordova的Android平台代码至Android Studio的一些问题
- 关于android中listview的adapter如何通用的一些看法
- 关于cocos2d-x项目移植到android平台的时候明明已经将资源复制到assets还是出现的assets is nullptr的问题
- 基于移动平台的多媒体框架——移植SDL到Android
- 关于MSC和SDL软件的一些看法
- 基于移动平台的多媒体框架——移植SDL到Android
- AIR ANE(本机扩展)使用中的一些问题(Android平台)
- 关于android中位运算的一些看法
- 对google的android的平台的一些看法。
- 关于在Android上运行纯C程序即移植thttpd到android平台
- 基于移动平台的多媒体框架——移植SDL到Android
- 关于android中矢量图如何用,有坑,爬坑,如何替代的另一些看法
- 关于在android中,如何一步到位,全局替换控件样式的一些看法
- arm Linux平台下SDL及扩展库的移植
- Android 关于volley的一些源码和扩展 (一)
- 关于对android移植的一些想法
- 关于为android的ViewGroup加上适配器的一些看法..