SDL中 so库的使用

用到的项目:Tocy-Android-SDLv2

 

JAVA层:只有一个 SDLActivity.java 路径\Android-SDLv2\src\org\libsdl\app

 

项目简单分析:

默认在他的项目运行SDLActivity.java 会在oncreat中调用 surfaceview,接着调用 sdl thread ——SDLmain——nativeInit (调用到SO的本地初始化方法)

如下图,运行sdlmain时候先运行so库初始化方法SDL_Android_Init(从LOG可以看出来)。

 

 

 

 

 

谁用调用 SDL_Android_Init ?

JNI文件中$(SDL_ROOT)/src/main/android/SDL_android_main.c (编译sdlmain.so时候添加进去了) 调用Java_org_libsdl_app_SDLActivity_nativeInit ——SDL_Android_Init(env, cls)和status = SDL_main(argc, argv);

 

SDL_android_main.c会调用到 main.c

所以TONY版只需要 在 JNI目录的main.c中 准确说是各对应的as_lesson_yuv.cpp 中重写SDL的C方法即可。因为android.mk 会把他们编译成SO文件。看android.mk 代码

LOCAL_SRC_FILES := as_lesson_bmp.c main.c\

$(SDL_ROOT)/src/main/android/SDL_android_main.c

编译顺序从右往左编译

 

使用方法:

1,把Tocy-Android-SDLv2 当做module 导进来使用。然后直接import用它的SDLActivity 或者新建一个Activity extends SDLActivity (oncreat不重写都可以,调用的父类的oncreat)如图:就可以直接播放图片或者视频。

 

 

 

2,直接把SDLActivity.java 拷过来用。 不过不能直接拷贝到自己的类目录当中,因为它会调用libmain.so和libSDL2.so 这2个库的 会调用对应路径的方法。如

JNICALL Java_org_libsdl_app_SDLActivity_nativeInit 不然会报错,so方法未声明。

当然也可以修改JNI中的所有方法的路径,但是这样工程量大。

 

所以可以在你的src目录下新建该方法的路径,这样连package org.libsdl.app; 包名都不用改了。

 

 

 

 

 

 

posted @ 2019-04-26 17:18  风飘而去  阅读(848)  评论(0编辑  收藏  举报