You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Android插件添加ML模型遇阻,求原生加载方案

解决方案

1. 手动为Flutter插件的Android模块添加ML模型

Android Studio中插件目录的模型添加选项呈灰色,是因为插件的Android模块默认未被识别为完整的Android应用模块,直接手动操作即可:

  • 找到插件的android/src/main目录,若没有assets文件夹则新建一个
  • 将你的TensorFlow模型文件(如.tflite或.pb)复制到assets目录下
  • 修改插件的android/build.gradle文件,确保sourceSets配置包含assets目录:
    android {
        sourceSets {
            main {
                assets.srcDirs = ['src/main/assets']
            }
        }
    }
    

2. 修复插件原生代码的导入错误

导入错误大多源于插件模块依赖配置不全,或是Android Studio未正确同步项目:

  • 打开插件的android/build.gradle,添加TensorFlow相关依赖(以TensorFlow Lite为例):
    dependencies {
        implementation 'org.tensorflow:tensorflow-lite:2.15.0'
        // 如需GPU扩展支持,可按需添加:implementation 'org.tensorflow:tensorflow-lite-gpu:2.15.0'
    }
    
  • 点击Android Studio顶部的File > Sync Project with Gradle Files,等待同步完成
  • 若仍有错误,执行File > Invalidate Caches... > Invalidate and Restart清除缓存后重启IDE

3. 基于Hybrid Composition在原生端加载模型并与Flutter交互

借助Hybrid Composition,插件的原生View可直接加载模型,再通过通道与Flutter层交互:

  • 在插件的原生View类(继承PlatformView)中初始化TensorFlow Lite解释器:
    import org.tensorflow.lite.Interpreter;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.nio.MappedByteBuffer;
    import java.nio.channels.FileChannel;
    import android.content.Context;
    import android.view.View;
    import io.flutter.plugin.common.PlatformView;
    
    public class YourPluginView implements PlatformView {
        private Interpreter tflite;
        private final Context context;
    
        public YourPluginView(Context context) {
            this.context = context;
            // 加载assets中的模型
            try {
                MappedByteBuffer modelBuffer = loadModelFile();
                tflite = new Interpreter(modelBuffer);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        private MappedByteBuffer loadModelFile() throws IOException {
            var fileDescriptor = context.getAssets().openFd("your_model.tflite");
            var inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
            var fileChannel = inputStream.getChannel();
            long startOffset = fileDescriptor.getStartOffset();
            long declaredLength = fileDescriptor.getDeclaredLength();
            return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);
        }
    
        // 可添加模型推理方法,通过MethodChannel实现Flutter与原生的数据传递
        // 例如接收Flutter传入的输入数据,执行推理后返回结果
    
        @Override
        public View getView() {
            // 返回你的Hybrid Composition View实例
            return new View(context);
        }
    
        @Override
        public void dispose() {
            // 释放模型资源
            if (tflite != null) {
                tflite.close();
            }
        }
    }
    
  • 通过MethodChannel完成Flutter与原生的数据交互:Flutter传递推理输入数据,原生执行推理后返回结果

4. 验证模型加载状态

  • 运行Flutter项目,确认插件原生代码可正常初始化解释器,无加载错误
  • 可添加日志输出(如Log.d("ModelLoad", "模型加载成功")),直观确认模型加载状态

内容的提问来源于stack exchange,提问作者Dhiraj Nikam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:53:04