前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 )

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

作者头像
韩曙亮
发布2023-03-28 18:07:29
1K0
发布2023-03-28 18:07:29
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

Oboe GitHub 主页 : GitHub/Oboe

一、导入 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)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、导入 Oboe 库
  • 二、使用预构建的二进制库和头文件
  • 三、编译 Oboe 源代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档