调用图
说明:flutter通过MethonChannel方式调用android原生接口,借助android的jni开发能力调用fmod库
准备工作
-
下载FMOD库
FMOD官网
选择Android支持库下载,解压下载好的压缩文件, api/core/inc目录和api/core/lib目录下的文件就是之后项目中需要用到的c++的头文件和.so库,api/core/lib目录下包含了适用于不同ABI的.so文件 -
Android Studio安装插件
这里有一个需要注意的点,勾选Show Package Details查看NDK下具体安装了那些版本的NDK,上图中是我所下载并安装的NDK的版本,我曾经尝试将所有版本的NDK都勾选,然后下载并安装所有版本的NDK,再运行程序,会报错,错误的内容是FMOD头文件中定义的一些属性跟全局定义的属性冲突了,我猜测是因为FMOD头文件中的一些属性,跟某个版本的NDK中的属性有冲突,所以如果出现定义冲突的问题,可以尝试更换NDK的版本来解决
配置SO库
- 在android/app目录下创建CMakeList.txt文件(该文件的配置说明将在之后说明)
- 在android/app目录下创建libs目录,将api/core/lib目录下的fmod.jar文件拷贝到libs目录下
- 在android/app/src/main目录下分别创建cpp、jniLibs目录。注意:jniLibs目录名称一定不能写错,jniLIbs也必须创建在android/app/src/main目录下,在打包APK的时候,默认会将jniLibs目录下的so文件打包到APK中,如果该文件夹名称错误,就会导致APP运行的时候找不到动态运行库(.so文件)
- 在cpp目录下创建include目录,将fmod的api/core/inc目录下的文件拷贝到include目录中
- 在cpp目录下创建native-lib.cpp文件(之后会详细说明该文件的用途)
到这里,所有需要创建目录和文件,以及需要拷贝到项目中的文件都已经准备好,下面开始进行配置
-
配置build.gradle(Module:android.app)文件
分别添加三处externalNativeBuild配置,在defaultConfig外面的是用来指定CMakeLists文件的路径,defaultConfig内部的是在执行CMake时的命令行参数,buildTypes内部的参数用来指定是用libfmod.so还是用libfmodL.so,fmod提供了调试环境和正式环境下对应的不同so文件
-
dependencies增加依赖
-
CMakeList.txt配置