FFmpeg使用第二步,测试编译好的SO库。
使用AndroidStudio创建测试工程
创建工程,并新建 jni 目录,如图:
界面实现
这是一个简单的例子,所以只有一个Activity,Activity里有四个按钮和一个TextView(ScrollView包裹),直接上代码吧:
MainActivity.java
|
|
activity_main.xml
|
|
将编译好的FFmpeg放入工程
在jni目录新建目录include存放头文件,如图:
将生成的so库放入jni目录,新建Android.mk\Application.mk\ffmpegdemo.c三个空文件备用,如图:
准备调用C语言函数。使用JNI调用C语言代码有两点需要做的步骤:
· 声明C语言函数对应的Java函数
· 声明要加载的类库
需要注意,C语言函数的声明要加上“native”关键字;加载类库的时候需要使用“System.loadLibrary()”方法。
所以改写MainActivity.java为:
|
|
编写C语言端代码
获取C语言的接口函数声明
根据Java对于C语言接口的定义,生成相应的接口函数声明。这一步需要用到JDK中的“javah”命令。命令行切换到src/main/java文件夹下,输入如下命令:
|
|
在src/main/java目录下会生成头文件,com_ihubin_ffmpegstudy_MainActivity.h,如图:
将com_ihubin_ffmpegstudy_MainActivity.h移动到jni目录,如图:
在ffmpegdemo.c中实现生成的头文件中的方法
|
|
编写Android.mk
Android.mk
|
|
编写Application.mk(可选)
Application.mk中的APP_ABI设定了编译后库文件支持的指令集,默认使用“armeabi”.
APP_ABI取值为“all”表示支持所有的指令集.
Application.mk
|
|
运行ndk-build
编写完Android的Makefile文件之后,就可以运行ndk-build编译生成可以通过JNI调用的类库了。
ndk-build本身是一个脚本,位于NDK根目录下。切换到Android程序src/main/jni目录中,直接执行该脚本就可以了。
△ 需要先配置NDK环境变量!!需要先配置NDK环境变量!!需要先配置NDK环境变量!!
运行完就可以看到生成的SO文件了,如图:
生成是SO文件在 src/main/libs/armeabi-v7a中:
这时就可以运行程序查看效果了~~Well Done !
PS | 补充
直接运行会报错:
解决方法:
修改build.gradle文件:
|
|
查看效果
源码
Module:FFmpeg-Test-SO
Demo APK下载地址:https://www.pgyer.com/FFmpegTestSO
也可以扫码下载体验:
来源地址:
http://www.ihubin.com/blog/android-ffmpeg-demo-2/