SDL2.0.9源码分析
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调用方法这里讲的很详细