如何在 Android 应用中正确集成 ONNX Runtime 进行模型推理

大瑶酱_2366

大瑶酱_2366

2026-09-24

794人浏览

原创

如何在 Android 应用中正确集成 ONNX Runtime 进行模型推理

本文详解在 Android 项目中通过 onnxruntime-android 依赖加载和运行 ONNX 模型的完整流程,涵盖 Gradle 配置、代码初始化、常见编译错误排查(如 ai.onnxruntime 包无法识别)及版本兼容性建议。

本文详解在 android 项目中通过 onnxruntime-android 依赖加载和运行 onnx 模型的完整流程,涵盖 gradle 配置、代码初始化、常见编译错误排查(如 `ai.onnxruntime` 包无法识别)及版本兼容性建议。

要在 Android 应用中成功部署由 MATLAB 训练并导出为 ONNX 格式的神经网络,核心在于正确引入官方 ONNX Runtime for Android SDK,并确保构建系统能正常解析其 AAR(Android Archive)包中的 Java/Kotlin 接口。你遇到的 package ai.onnxruntime does not exist 错误,本质上是 Gradle 未能将 onnxruntime-android 的 AAR 依赖正确解压并注入编译类路径所致。

✅ 正确的 Gradle 配置方式

请移除 @aar 后缀——这是关键误区。implementation 'com.microsoft.onnxruntime:onnxruntime-android:1.15.1@aar' 中的 @aar 是手动强制指定模块类型的方式,但现代 Gradle(尤其是 Android Gradle Plugin 7.0+)已默认支持自动解析 AAR,显式添加 @aar 反而可能干扰依赖解析器,导致元数据读取失败、R8/ProGuard 规则缺失或 Java 接口未暴露。

✅ 推荐写法(无需 @aar):

// app/build.gradle
android {
    compileSdk 34

    defaultConfig {
        minSdk 21  // onnxruntime-android 最低支持 API 21
        targetSdk 34
    }
}

dependencies {
    implementation 'com.microsoft.onnxruntime:onnxruntime-android:1.16.0-rc1'
    // 或使用稳定版(推荐生产环境):
    // implementation 'com.microsoft.onnxruntime:onnxruntime-android:1.17.1'
}

? 验证依赖是否生效:同步项目后,在 Android Studio 的 Project → External Libraries 下应能看到 onnxruntime-android-1.x.x.aar,且展开后可浏览 ai.onnxruntime.* 包结构(含 OrtEnvironment, OrtSession, OrtTensor 等类)。

Tiktok Android
Tiktok Android

使用ADB自动化Android上的TikTok互动。搜索话题,使用AI或模板评论,包含设置向导。用于TikTok自动化营销和通过策略性评论建立社交影响力。

下载

✅ 基础 Java/Kotlin 初始化示例

配置成功后,即可在 Activity 或 ViewModel 中安全导入并使用:

// Java 示例
import ai.onnxruntime.*;

public class OnnxInferenceHelper {
    private OrtEnvironment environment;
    private OrtSession session;

    public void init(Context context, String modelPath) throws Exception {
        environment = OrtEnvironment.getEnvironment();
        // 从 assets 加载模型(推荐)
        AssetManager assetManager = context.getAssets();
        InputStream is = assetManager.open(modelPath); // e.g., "model.onnx"
        session = environment.createSession(is);
    }

    public void runInference(float[] input) throws OrtException {
        // 构造输入 Tensor(以 float32 为例)
        OrtTensor inputTensor = OrtTensor.createTensor(
            environment, 
            FloatBuffer.wrap(input), 
            new long[]{1, input.length}, 
            OnnxJavaType.FLOAT
        );

        // 执行推理
        Map<string orttensor> inputs = Map.of("input", inputTensor);
        Map<string orttensor> outputs = session.run(inputs);

        // 解析输出...
    }
}</string></string>

⚠️ 注意事项与最佳实践

  • API Level 兼容性:onnxruntime-android 要求 minSdk >= 21;若需支持更低版本,请确认所用版本是否提供 arm64-v8a/armeabi-v7a/x86_64 等 ABI 的原生库(1.16+ 默认包含主流 ABI)。
  • 模型部署路径:建议将 .onnx 文件放入 src/main/assets/ 目录,避免打包进 res/raw(ONNX Runtime 不支持 TypedArray 流)。
  • 线程安全:OrtEnvironment 是线程安全的单例,但 OrtSession 实例不保证线程安全,高并发场景下建议复用 session 或加锁。
  • 版本选择建议:优先使用最新稳定版(如 1.17.1),而非 RC 版本;若遇兼容性问题,可回退至 1.15.1(但务必去掉 @aar)。
  • 混淆与 R8:默认无需额外 ProGuard 规则,SDK 已内置 consumer-rules.pro;若启用全量混淆,可保留 ai.onnxruntime.** { *; }。

完成上述配置后,import ai.onnxruntime.* 将不再报错,OrtEnvironment 和 OrtSession 等核心类可正常使用。整个流程无需手动下载 AAR 或配置本地仓库——Maven Central 的托管依赖足以支撑端到端部署。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

android

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
android开发三大框架
android开发三大框架

android开发三大框架是XUtil框架、volley框架、ImageLoader框架。本专题为大家提供android开发三大框架相关的各种文章、以及下载和课程。

2023.08.14

862

4

android是什么系统
android是什么系统

Android是一种功能强大、灵活可定制、应用丰富、多任务处理能力强、兼容性好、网络连接能力强的操作系统。本专题为大家提供android相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.22

2487

5

android权限限制怎么解开
android权限限制怎么解开

android权限限制可以使用Root权限、第三方权限管理应用程序、ADB命令和Xposed框架解开。详细介绍:1、Root权限,通过获取Root权限,用户可以解锁所有权限,并对系统进行自定义和修改;2、第三方权限管理应用程序,用户可以轻松地控制和管理应用程序的权限;3、ADB命令,用户可以在设备上执行各种操作,包括解锁权限;4、Xposed框架,用户可以在不修改系统文件的情况下修改应用程序的行为和权限。

2023.09.19

4537

7

android重启应用的方法有哪些
android重启应用的方法有哪些

android重启应用有通过Intent、PendingIntent、系统服务、Runtime等方法。本专题为大家提供Android相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

565

5

Android语音播放功能实现方法
Android语音播放功能实现方法

实现方法有使用MediaPlayer实现、使用SoundPool实现两种。可以根据具体的需求选择适合的方法进行实现。想了解更多语音播放的相关内容,可以阅读本专题下面的文章。

2024.03.01

904

5

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

20

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

0

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

0

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

0

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 43.2万人学习

Java 教程
Java 教程

共578课时 | 186.4万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 9.3万人学习