用到的项目: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; 包名都不用改了。

SDL中 so库的使用的更多相关文章

  1. 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题4---共享库中嵌套库带路径【已解决】

    [Linux开发]OpenCV在ARM-linux上的移植过程遇到的问题4-共享库中嵌套库带路径[已解决] 标签:[Linux开发] 紧接着上一篇,我居然又尝试了一下编译opencv,主要是因为由于交 ...

  2. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  3. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

  4. Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

    Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://b ...

  5. QT中静态库的生成与使用

    一. 静态库的生成    1. 测试目录: lib    2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...

  6. C语言中静态库和动态库笔记

    库 库,故名思议,是存放东西的地方,其中存放的东西可以被多个人公用. 程序中借用库的概念,描述将代码进行抽取,这种代码被大多数程序使用, 其过程具有一定的模块化.封装.抽象的特征. 按照库的使用方式, ...

  7. QT中共享库的生成与使用

    一. 静态库的生成1. 测试目录: lib2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为"I'm i ...

  8. 获取sqlserver数据库中所有库、表、字段名的方法

    获取sqlserver数据库中所有库.表.字段名的方法 2009年03月12日 星期四 下午 12:51 1.获取所有数据库名: SELECT Name FROM Master..SysDatabas ...

  9. QT中静态库的生成与使用——创建共享库代码,附例子

    一. 静态库的生成    1. 测试目录: lib    2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...

随机推荐

  1. Unity中用Mono插件解析xml文件

    1.解压压缩包,把文件夹拖到脚本文件夹下 Mono是第三方基金会开发的开源的东西,通过Mono基础上开发的程序可以在各个系统下运行.开发语言是C#. 用插件解析比较高效,平台运行稳定.使用简单. Un ...

  2. Vue的自定义组件之间的数据传递

    一,父级传向子级 1,在子级的属性中添加props:['myname',......],参数可以传多个,看具体而定: 2,在父级data中定义好需要传递的变量数据,例如name:"rose& ...

  3. 201671010142 2017-2 《java第十二章学习感悟》

    Swing 是一个为Java设计的GUI工具包. Swing是JAVA基础类的一部分. Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表. Swing提供许多比AWT更好的屏幕 ...

  4. __nw_connection_get_connected_socket_block_invoke Connection has no connected handle 解决办法

    1. Xcode menu -> Product -> Edit Scheme... 2. Environment Variables -> Add -> Name: &quo ...

  5. linux 迁移项目ProtocolException

    背景:服务器跟换机房,虚拟机完整迁移项目,只修改ip和主机名 1.检查/etc/hosts 中ip 和主机名映射 2.检查网络端口是否有限制以及端口开放是否全了,检查ip有没有配对.RMI注册不上.

  6. struts拦截器的知识

    如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了str ...

  7. php 跨域请求

    执行要在跨域请求的服务器端对应的代码上增加下面的代码 <?php namespace Admin\Controller; // 指定允许跨域访问 header('Access-Control-A ...

  8. Android中获取文件路径的方法总结及对照

    最近在写文件存贮,Android中获取文件路径的方法比较多,所以自己也很混乱.找了好几篇博客,发现了以下的路径归纳,记录一下,以备不时之需 Environment.getDataDirectory() ...

  9. k-means缺陷

    k均值算法非常简单且使用广泛,但是存在的缺陷有: 1. K值需要预先给定: 属于预先知识,很多情况下K值的估计非常困难. 2. K-Means算法对初始选取的聚类中心点是敏感的: 不同的随机种子点得到 ...

  10. npm -g -D -s的区别

    npm install module-name 全局安装 npm install module-name -D 即 npm install module-name -save-dev  保存到devD ...