ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

sherpa-onnx Android AAR 构建实战:从预编译 so 到 sherpa_onnx-release.aar 的完整流程

2026/9/14 13:16:01 拓冰建站 浏览量
sherpa-onnx Android AAR 构建实战:从预编译 so 到 sherpa_onnx-release.aar 的完整流程 sherpa-onnx Android AAR 构建实战从预编译 so 到 sherpa_onnx-release.aar 的完整流程【免费下载链接】sherpa-onnxSpeech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, HarmonyOS, Raspberry Pi, RISC-V, RK NPU, Axera NPU, Ascend NPU, x86_64 servers, websocket server/client, support 12 programming languages项目地址: https://gitcode.com/GitHub_Trending/sh/sherpa-onnxsherpa-onnx 官方为 Android 提供了一个开箱即用的 AAR 打包工程android/SherpaOnnxAar其工作方式是先把各 ABI 的预编译动态库放入jniLibs再用 Gradle 将 Kotlin API 层与原生库一起打包为可直接被 App 集成的sherpa_onnx-release.aar。本文基于仓库内该目录的 README 与工程配置完整讲解 AAR 的构建步骤、工程结构与依赖配置并结合 Kotlin API 源码说明打包产物中包含哪些能力帮助你在 Android 项目ASR、TTS、VAD、说话人识别等场景中直接以依赖库形式复用 sherpa-onnx 的端侧推理能力。构建前的准备工作获取仓库与预编译库按照 android/SherpaOnnxAar/README.md 的说明构建 AAR 需要先克隆仓库并下载对应版本的 Android 预编译产物so 库git clone https://github.com/k2-fsa/sherpa-onnx cd sherpa-onnx wget https://github.com/k2-fsa/sherpa-onnx/releases/download/v1.13.7/sherpa-onnx-v1.13.7-android.tar.bz2 tar xvf sherpa-onnx-v1.13.7-android.tar.bz2这里有两个值得注意的前提版本号必须与仓库版本一致。当前仓库 CMakeLists.txt 中声明的版本为set(SHERPA_ONNX_VERSION 1.13.7)与 README 中下载的v1.13.7预编译包一致。若你切换到其他版本标签应替换为对应版本的 tar 包否则 so 与 Kotlin API 层不匹配会导致UnsatisfiedLinkError等运行期错误。解压后会在仓库根目录得到jniLibs/目录内含四个 ABI 的 so 文件。将 so 库放入 AAR 工程的 jniLibs解压完成后把四个 ABI 的 so 分别复制到 AAR 工程对应的位置cp -v jniLibs/arm64-v8a/* android/SherpaOnnxAar/sherpa_onnx/src/main/jniLibs/arm64-v8a/ cp -v jniLibs/armeabi-v7a/* android/SherpaOnnxAar/sherpa_onnx/src/main/jniLibs/armeabi-v7a/ cp -v jniLibs/x86/* android/SherpaOnnxAar/sherpa_onnx/src/main/jniLibs/x86/ cp -v jniLibs/x86_64/* android/SherpaOnnxAar/sherpa_onnx/src/main/jniLibs/x86_64/目标目录结构在仓库中已经预留好android/SherpaOnnxAar/sherpa_onnx/src/main/jniLibs/下已有arm64-v8a、armeabi-v7a、x86、x86_64四个子目录。Gradle 打包时会把src/main/jniLibs/abi/*.so按 ABI 维度打进 AAR 的jni/目录App 侧加载时由系统按设备 ABI 自动选择。工程结构与关键 Gradle 配置android/SherpaOnnxAar是一个独立的 Gradle 工程自带gradlew、gradlew.bat与 wrapper由根工程配置加一个 library 模块组成settings.gradle.kts声明rootProject.name SherpaOnnxAar并include(:sherpa_onnx)即 AAR 对应的就是sherpa_onnx子模块仓库来源限定为google()与mavenCentral()。build.gradle.kts根工程只声明三个插件application、kotlin-android、library均apply false实际由版本目录统一管控。gradle/libs.versions.toml版本目录中锁定 Android Gradle Plugin8.4.0、Kotlin1.7.20以及 androidx.core-ktx、appcompat、material 等库版本。gradle.propertiesJVM 参数-Xmx2048m -Dfile.encodingUTF-8开启android.useAndroidXtrue与android.nonTransitiveRClasstrue。library 模块的关键配置在 sherpa_onnx/build.gradle.ktsandroid { namespace com.k2fsa.sherpa.onnx compileSdk 34 defaultConfig { minSdk 21 testInstrumentationRunner androidx.test.runner.AndroidJUnitRunner consumerProguardFiles(consumer-rules.pro) } buildTypes { release { isMinifyEnabled false proguardFiles( getDefaultProguardFile(proguard-android-optimize.txt), proguard-rules.pro ) } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget 1.8 } }从这份配置可以读出几个与集成方直接相关的要点最低系统要求 minSdk 21Android 5.0compileSdk 34JVM 目标 1.8集成的 App 需满足这些前提release 构建未开启混淆isMinifyEnabled false且通过consumerProguardFiles向使用方透传 consumer-rules.pro模块的 AndroidManifest.xml 为空壳仅声明 namespace 级别的 manifest说明该库不含任何 Activity/Service 组件是一个纯代码 so 的 library 模块不会给 App 引入界面资源。执行 Gradle 构建并得到 AAR 产物复制完 so 后进入 AAR 工程执行 release 构建cd android/SherpaOnnxAar ./gradlew :sherpa_onnx:assembleRelease ls -lh ./sherpa_onnx/build/outputs/aar/sherpa_onnx-release.aar cp ./sherpa_onnx/build/outputs/aar/sherpa_onnx-release.aar ../../sherpa-onnx-1.13.7.aar./gradlew :sherpa_onnx:assembleRelease只构建sherpa_onnx子模块的 release 变体产物固定为sherpa_onnx/build/outputs/aar/sherpa_onnx-release.aar最后一步把 aar 复制到仓库外并命名为sherpa-onnx-版本.aar示例中为1.13.7便于归档分发。若在其他版本上构建命名时应同步替换版本号避免分发时版本错乱。构建完成后可以直接用unzip -l查看 aar 内容其中会包含classes.jarKotlin API 类与按 ABI 组织的jni/*.so。App 侧集成时将该 aar 放入libs/并以implementation(files(libs/sherpa-onnx-1.13.7.aar))方式引入即可aar 自身还依赖 core-ktx、appcompat、material版本见 gradle/libs.versions.toml。AAR 中包含的 Kotlin API 能力AAR 的 Java 源码位于android/SherpaOnnxAar/sherpa_onnx/src/main/java/com/k2fsa/sherpa/onnx/从目录结构看它打包了 sherpa-onnx 面向 Android 的完整 Kotlin 封装覆盖的主要能力包括能力对应文件非流式语音识别Transducer/Zipformer、Paraformer、SenseVoice、Whisper 等模型配置OfflineRecognizer.kt、OfflineStream.kt流式语音识别OnlineRecognizer.kt、OnlineStream.kt语音合成Tts.kt语音端点检测Vad.kt关键词唤醒KeywordSpotter.kt说话人识别 / diarizationSpeakerEmbeddingExtractorConfig.kt、OfflineSpeakerDiarization.kt、Speaker.kt标点恢复 / 语音增强 / 音频打标 / 语种识别OfflinePunctuation.kt、OnlinePunctuation.kt、OfflineSpeechDenoiser.kt、AudioTagging.kt、SpokenLanguageIdentification.kt工具类WaveReader.kt、VersionInfo.kt、QnnConfig.kt以 OfflineRecognizer.kt 为例其中定义了OfflineRecognizerResult含text、tokens、timestamps、lang、emotion、event等字段以及 Transducer、Paraformer、NeMo CTC、Zipformer CTC、Wenet CTC、Omnilingual ASR CTC、FireRed ASR CTC、FunASR Nano 等一系列模型的配置 data class多数配置还带有qnnConfig: QnnConfig字段说明该 Kotlin 层支持 Qualcomm NPUQNN部署路径App 在初始化识别器时可按模型类型填入对应的 onnx 模型路径。小结整个 AAR 构建流程可以概括为四步克隆仓库 → 下载与仓库版本一致的 Android 预编译包 → 把四个 ABI 的 so 复制进sherpa_onnx/src/main/jniLibs/→ 执行./gradlew :sherpa_onnx:assembleRelease得到sherpa_onnx-release.aar。构建前提主要是具备 JDK 17 与 Android SDKAGP 8.4.0 的要求so 与仓库版本必须一致当前为 1.13.7。得到的 aar 可直接分发给其他 Android 工程使用无需对方再接触 C 源码如需了解 App 侧如何调用这些 API可参考仓库中其他 Android 示例工程如 android/SherpaOnnx 等目录。【免费下载链接】sherpa-onnxSpeech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, HarmonyOS, Raspberry Pi, RISC-V, RK NPU, Axera NPU, Ascend NPU, x86_64 servers, websocket server/client, support 12 programming languages项目地址: https://gitcode.com/GitHub_Trending/sh/sherpa-onnx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考