SDL2.0.9源码分析

时间:2023-11-23 20:29:50

1.首先 2.0.9编译so出来跟一直不一样,多了个hidapi  库

2.跟Tocy的对比,SDLmain 执行的路径不一样,一个是/src/main/android/SDL_android_main.c

一个是src\core\android\SDL_android.c

TOCY :

视频渲染需要Surfaceview,所以SDLsurface继承了它来播放。

SDLSurface.surfaceChanged()——sdlThread———SDLMain(runable)——SDLActivity.nativeInit----->

执行/src/main/android/SDL_android_main.c的SDL_Android_Init——>status = SDL_main(argc, argv);(在SDL_android_main.c)

功能很简单,初始化SDL在Android下的参数,获取命令行参数,执行SDL_main()。

2.0.9官方介绍使用

--- MyGame.java --------------------------

package com.gamemaker.game;

import org.libsdl.app.SDLActivity;

/**

* A sample wrapper class that just calls SDLActivity

*/

public class MyGame extends SDLActivity { }

启动流程:

Oncreate————mSurface = new SDLSurface——————handleNativeState(onpause,onResume,surfaceChanged用到)------mSDLThread---->SDLMain线程(runable)————>SDLActivity.nativeRunMain(运行so的主函数)——执行jni\SDL2\src\core\android\SDL_android.c————执行SDL_main——————执行完来到java层退出————SDLActivity.handleNativeExit();

官方说自从2.0.6后src\main\android\SDL_android_main.c   不再需要了,可能全部集合在src\core\android\SDL_android.c这里了。

SDL_android.c和SDL_android_mian.c是官方demo中编译官方接口的c源文件,其中SDL_android.c编译21个接口放在libSDL2.so共享库中;在此次使用SDL播放视频的Demo中,SDL_android_mian.c配合我们自定义的Custom.c(可以定义多个或者一个文件)只编译一个nativeInit()接口放在libmain.so共享库中

所以libmain.so  只包含了libSDL2中的有 nativeInit()接口

https://www.jianshu.com/p/067ea8095a5e

SDL调用方法这里讲的很详细