Oboe GitHub 主页 : GitHub/Oboe
Google 官方提供了两种导入 Oboe 库的方式 :
Oboe 导入库方案适用场景 :
前提条件 :
参考配置 : 【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
Prefab 是用于 预编译 C/C++ 函数库 , 生成构建系统集成的工具 ; Prefab 包中含有 少量的元数据 , 以及描述的预构建的函数库 ; 参考 : GitHub/Prefab
在 Module 下的 build.gradle 中进行如下配置 :
① 添加依赖 :
dependencies {
implementation 'com.google.oboe:oboe:1.4.3'
}
② 设置 Prefab 开启 :
android {
buildFeatures {
prefab true
}
}
③ 配置应用使用共享模板库 :
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments "-DANDROID_STL=c++_shared"
}
}
}
}
在 CMakeLists.txt 中进行如下配置 :
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 , 即可编译通过 , 有任意一个版本低了 , 都会编译失败 ;
Google 官方示例 hello-oboe 就是使用这种方法 , 直接将 Oboe 源码放在应用中编译 ;
下载最新的发布版本的 Oboe 源代码 , 下载地址 https://github.com/google/oboe/releases/ ;
将其放在指定的目录中 , 并记录该目录路径 ; 推荐将源码放在 cpp 源码路径下 ;
编辑 CMakeLists.txt 构建脚本 :
① 设置 Oboe 源代码路径 : 这里 假设 Oboe 源代码在 CMakeLists.txt 构建脚本相同层级目录中 , 该操作相当于 设置了一个变量 ;
set (OBOE_DIR ./oboe)
② 将 Oboe 源码目录设置为工程的子路径 : add_subdirectory 告诉 CMake 到 OBOE_DIR 路径中查找该路径下的 CMakeLists.txt 构建脚本 , 编译该构建脚本中指定的源码 , ./oboe 指定的是编译后的二进制文件存放位置 ;
add_subdirectory (${OBOE_DIR} ./oboe)
③ 指定 Oboe 源码的头文件路径 : 允许本次 CMake 编译的目标库中可以包含 Oboe 源码头文件 , 进而访问 Oboe API ;
include_directories (${OBOE_DIR}/include)
完整 CMakeLists.txt 构建脚本示例 :
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)