文章目录
- 一、导入 Oboe 库
- 二、使用预构建的二进制库和头文件
- 三、编译 Oboe 源代码
Oboe GitHub 主页 : GitHub/Oboe
- ① 简单使用 : Getting Started
- ② Oboe 全指南 : Full Guide To Oboe
- ③ Oboe API 参考 : API reference
- ④ Android 音频框架发展 : Android audio history
一、导入 Oboe 库
Google 官方提供了两种导入 Oboe 库的方式 :
- ① 预构建二进制库 : 使用 预构建的二进制库和头文件 ;
- ② 编译源码 : 直接 添加 Oboe 源码到工程中 , 在 Android Studio 中编译 Oboe 源码 ;
Oboe 导入库方案适用场景 :
- 使用稳定功能 : 如果只想要 使用稳定版本的 Oboe 函数库 , 使用方案 ① ;
- 调试修改代码 : 如果想要 调试修改 Oboe 源代码 , 使用方案 ② ;
二、使用预构建的二进制库和头文件
前提条件 :
- 函数库发布形式 : Oboe 作为 Prefab 包 , 在 Google Maven 中发布 ;
- 开发环境要求 : 如果要支持 Prefab , 需要的 Android Studio 开发环境的最低版本为 Android Studio 4.1 ;
- Android Studio 版本 : 4.1
- Gradle 版本 : 6.6.1
- Gradle 插件版本 : 4.1.0
参考配置 : 【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
Prefab 是用于 预编译 C/C 函数库 , 生成构建系统集成的工具 ; Prefab 包中含有 少量的元数据 , 以及描述的预构建的函数库 ; 参考 : GitHub/Prefab
在 Module 下的 build.gradle 中进行如下配置 :
① 添加依赖 :
代码语言:javascript复制dependencies {
implementation 'com.google.oboe:oboe:1.4.3'
}
② 设置 Prefab 开启 :
代码语言:javascript复制android {
buildFeatures {
prefab true
}
}
③ 配置应用使用共享模板库 :
代码语言:javascript复制android {
defaultConfig {
externalNativeBuild {
cmake {
arguments "-DANDROID_STL=c _shared"
}
}
}
}
在 CMakeLists.txt 中进行如下配置 :
代码语言:javascript复制find_package (oboe REQUIRED CONFIG) # 查找 Oboe 函数库
target_link_libraries(app oboe::oboe) # 连接函数库 , app 就是 Native 层编译的动态库 , 给 Java 层使用的
使用上述配置 , AS 4.1 , Gradle 6.6.1 , Gradle Plugin 4.1.0 , 即可编译通过 , 有任意一个版本低了 , 都会编译失败 ;
三、编译 Oboe 源代码
Google 官方示例 hello-oboe 就是使用这种方法 , 直接将 Oboe 源码放在应用中编译 ;
下载最新的发布版本的 Oboe 源代码 , 下载地址 https://github.com/google/oboe/releases/ ;
将其放在指定的目录中 , 并记录该目录路径 ; 推荐将源码放在 cpp 源码路径下 ;
编辑 CMakeLists.txt 构建脚本 :
① 设置 Oboe 源代码路径 : 这里 假设 Oboe 源代码在 CMakeLists.txt 构建脚本相同层级目录中 , 该操作相当于 设置了一个变量 ;
代码语言:javascript复制set (OBOE_DIR ./oboe)
② 将 Oboe 源码目录设置为工程的子路径 : add_subdirectory 告诉 CMake 到 OBOE_DIR 路径中查找该路径下的 CMakeLists.txt 构建脚本 , 编译该构建脚本中指定的源码 , ./oboe 指定的是编译后的二进制文件存放位置 ;
代码语言:javascript复制add_subdirectory (${OBOE_DIR} ./oboe)
③ 指定 Oboe 源码的头文件路径 : 允许本次 CMake 编译的目标库中可以包含 Oboe 源码头文件 , 进而访问 Oboe API ;
代码语言:javascript复制include_directories (${OBOE_DIR}/include)
完整 CMakeLists.txt 构建脚本示例 :
代码语言:javascript复制cmake_minimum_required(VERSION 3.4.1)
# 1. 编译本应用中的 C 源码
add_library (native-lib SHARED native-lib.cpp )
# 2. 设置 Oboe 源代码路径 , 这里假设 Oboe 源代码在 CMakeLists.txt 构建脚本相同层级目录中 , 该操作相当于设置了一个变量
set (OBOE_DIR ./oboe)
# 3. 将 Oboe 源码目录设置为工程的子路径 ,
# add_subdirectory 告诉 CMake 到 OBOE_DIR 路径中查找该路径下的 CMakeLists.txt 构建脚本 ,
# 编译该构建脚本中指定的源码 ,
# ./oboe 指定的是编译后的二进制文件存放位置 ;
add_subdirectory (${OBOE_DIR} ./oboe)
# 4. 指定 Oboe 源码的头文件路径
# 允许本次 CMake 编译的目标库中可以包含 Oboe 源码头文件 , 进而访问 Oboe API
include_directories (${OBOE_DIR}/include)
# 5. 链接函数库 , native-lib 是本应用中编译的动态库 , 这里链接 log 日志库 , oboe 高性能音频库
# 该 oboe 函数库就是上面 add_subdirectory 操作编译的
target_link_libraries (native-lib log oboe)