本篇日期:2017-3-5
基本环境:
1. 操作系统:Windows10 64位;
2. Android Studio 2.3,64位。
3. Android NDK开发包:直接使用Android Studio安装NDK。(需要梯子)
操作步骤:
第一步:准备SDL源代码包;
1. 去http://www.libsdl.org/官网下载最新版SDL2-2.0.5
2. 解压后,可以在根目录下找到android-project目录。
3. 调整目录,使其成为一个可编译的工程:
(1) 将android-project目录剪切到与SDL2-2.0.5同级的目录;
(2) 然后将SDL2-2.0.5目录拷贝到android-project\jni目录下,并重命名为SDL;
第二步:为SDL增加main函数
1、main.c文件,可以从http://www.dinomage.com/wp-content/uploads/2013/01/main.c下载;文件内容如下:
#include
#include
#include
#include "SDL.h"
typedef struct Sprite
{
SDL_Texture* texture;
Uint16 w;
Uint16 h;
} Sprite;
/* Adapted from SDL's testspriteminimal.c */
Sprite LoadSprite(const char* file, SDL_Renderer* renderer)
{
Sprite result;
result.texture = NULL;
result.w = 0;
result.h = 0;
SDL_Surface* temp;
/* Load the sprite image */
temp = SDL_LoadBMP(file);
if (temp == NULL)
{
fprintf(stderr, "Couldn't load %s: %s\n", file, SDL_GetError());
return result;
}
result.w = temp->w;
result.h = temp->h;
/* Create texture from the image */
result.texture = SDL_CreateTextureFromSurface(renderer, temp);
if (!result.texture) {
fprintf(stderr, "Couldn't create texture: %s\n", SDL_GetError());
SDL_FreeSurface(temp);
return result;
}
SDL_FreeSurface(temp);
return result;
}
void draw(SDL_Window* window, SDL_Renderer* renderer, const Sprite sprite)
{
int w, h;
SDL_GetWindowSize(window, &w, &h);
SDL_Rect destRect = {w/2 - sprite.w/2, h/2 - sprite.h/2, sprite.w, sprite.h};
/* Blit the sprite onto the screen */
SDL_RenderCopy(renderer, sprite.texture, NULL, &destRect);
}
int main(int argc, char *argv[])
{
SDL_Window *window;
SDL_Renderer *renderer;
if(SDL_CreateWindowAndRenderer(0, 0, 0, &window, &renderer) < 0)
exit(2);
Sprite sprite = LoadSprite("image.bmp", renderer);
if(sprite.texture == NULL)
exit(2);
/* Main render loop */
Uint8 done = 0;
SDL_Event event;
while(!done)
{
/* Check for events */
while(SDL_PollEvent(&event))
{
if(event.type == SDL_QUIT || event.type == SDL_KEYDOWN || event.type == SDL_FINGERDOWN)
{
done = 1;
}
}
/* Draw a gray background */
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
SDL_RenderClear(renderer);
draw(window, renderer, sprite);
/* Update the screen! */
SDL_RenderPresent(renderer);
SDL_Delay(10);
}
exit(0);
}
第四步:导入Android Studio运行
如果是在工程打开状态,选择File->Close Project。之后,选择”Import project(Eclipse ADT,Gradle,etc)”,然后选择android-project目录将工程文件导入到Andriod Studio中。
【坑】这样之后,按编译将出现若干错误,能后死翘翘。错误英文提示大意是这个工程里面有C/C++代码,应当使用cmake或者ndk编译。解决办法是,在andriod studio面板的Gradle Script -> build.gradle(Module:app),在buildTypes{……}的后面,加上这段:
sourceSets.main {
jniLibs.srcDir 'libs'
jni.srcDirs = []
}
然后选择按照正常的Android工程运行即可。这个时候程序闪一下什么都没有,因为没有添加资源。
下载一个bmp图片,提供一个官方文档中提到的bmp地址:http://www.dinomage.com/wp-content/uploads/2013/01/image.bmp。
到Andriod Studio面板,选择app,按右键,New->Folder->Assets Folder,再将下载的image.bmp放到这个目录下,重新编译运行这个apk,这个就是SDL 2.05的hello world了。
本篇主要参考了如下搏文:
如何成功运行SDL官方提供的Android平台的Demo :
http://blog.csdn.net/gobitan/article/details/24771311