一、需求:
如果您开发的android播放器,使用SDL作为显示视频的工具,想要显示字幕、时间进度,就必须用到libSDL2_ttf了。
二、前期工作:
以前在debian系统下,交叉编译了libSDL2.so动态库,传送门《linux下交叉编译android版本的libSDL2.so》。
由于换了电脑,以前的环境没有了,只能重新部署环境,在新的win7系统下,安装虚拟机ubuntu 16.06 64位桌面版。
三、从0开始部署环境:
3.1 安装虚拟机
内载ubuntu系统,具体不详述了,能联网就行;
3.2 下载交叉编译需要的环境
下载ndk
android-ndk-r16b-linux-x86_64.zip
最新稳定版本 (r16b)
下载SDK
android-sdk_r24.4.1-linux.tgz
下载sdl
SDL2-2.0.5.zip
为什么要用2.0.5呢?最新的可不是它!因为官网给的编译教程,是以2.0.5为例的,我尝试过用最新的版本编译,不幸阵亡。。。;哪位大神有时间有毅力,编出来以后可以分享一下哈~
下载sdl_ttf
SDL2_ttf-2.0.14.zip
3.3 解压
(注:以下均为本人的绝对路径,具体操作,需改为自己环境的路径)
unzip /mnt/hgfs/share/android-ndk-r16b-linux-x86_64.zip -d ./
tar zxvf /mnt/hgfs/share/android-sdk_r24.4.1-linux.tgz -C ./
3.4 下载android sdk
cd android-sdk-linux/tools
./android
随后会弹出下载的对话框,选择相应的sdk和api版本,由于本人的工程代码创建时间比较久了,所以本人选择
sdk 26.0.1
API 19
根据具体项目选择即可。
3.5 设置环境变量
PATH="/tmp/android-ndk-r16b:$PATH" # for 'ndk-build'
PATH="/tmp/android-sdk-linux/tools:$PATH" # for 'android'
PATH="/tmp/android-sdk-linux/platform-tools:$PATH" # for 'adb'
export ANDROID_HOME=/tmp/android-sdk-linux/
export ANDROID_NDK_HOME=/tmp/android-ndk-r16b/
四、编译SDL库
参考《 linux下交叉编译android版本的libSDL2.so》,其实就是cd到sdl源码目录,执行以下命令,生成一个test工程
./androidbuild.sh org.libsdl.testttf ../test/testgles.c
如果不需要编译x86版本的库,可以将org.libsdl.testttf/jni/Application.mk,x86去掉,此次不需要
APP_ABI := armeabi armeabi-v7a
五、编译SDL_ttf库
第一步:
在org.libsdl.testttf/jni/src/Android.mk文件中,找到LOCAL_SHARED_LIBRARIES,添加SDL2_ttf,以便生成动态库
LOCAL_SHARED_LIBRARIES := SDL2 SDL2_ttf
第二步:
将解压后的sdl2_ttf源码copy到org.libsdl.testttf的jni目录下
cp SDL2_ttf-2.0.14 /tmp/SDL-2.0.5/build/org.libsdl.testttf/jni/SDL2_ttf
cd /tmp/SDL-2.0.5/build/org.libsdl.testttf
第三步:
编译
ndk-build -j$(nproc)
成功以后,在org.libsdl.testttf/libs目录下,生成了libSDL2_ttf.so
将libSDL2_ttf.so copy到工程目录,在CMakeList.txt,参考SDL2的方式,加入库的引用,即可。
六 效果演示
字幕在进度条下方
![android sdl2_ttf显示字幕](https://i-blog.csdnimg.cn/blog_migrate/9938da97ca0f102d9fafa7410baea360.png)
可以直接下载编译好的(能不能用不知道啊,我自己手机可以用,有问题欢迎交流):