【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 )

2023-03-28 18:07:29 浏览数 (1)

文章目录

  • 一、导入 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)

0 人点赞