Flutter - 初次使用FFI的一些记录

最近在研究flutter如何绕过原生端直接调用c++的函数库,在flutter2版本官方提供了比较稳定的FFI(外部功能接口),下面是最基本的用法:

1.创建一个用于flutter调用的c++文件,文件名为cout.c++,文件里面有一个count方法

extern "C" __attribute__((visibility("default"))) __attribute__((used))

int count(int32_t x, int32_t y){
    return x+y;
}

2.将写好的c++文件放在IOS/Classes文件夹下(至于为什么要放在这里,网上很多博客都是固定放在这个位置,至于能不能放在其他位置,以后再研究)。

3.在android目录下创建CMakeLists.txt文件,把所有需要调用的c++文件通过add_library导入,这里导入刚才写好的cout.c++。

add_library( cout //库名称
             SHARED //模式:动态库
 ../ios/Classes/cout.cpp //文件路径,还需要添加其他文件换行即可;
)

4.在android/app目录下的build.gradle文件里配置CMakelists。

android {
 externalNativeBuild {
        cmake {
            path "../CMakeLists.txt"
        }
    }
}

5.经过上面4步所需要调用的c++库已经导入进我们的flutter项目了,接下来就是在flutter端调用c++库里面的函数。

import 'dart:io';
import 'package:flutter/material.dart';
final DynamicLibrary ffiLib = Platform.isAndroid ? DynamicLibrary.open('libcout.so') : DynamicLibrary.process();
    
    final int Function(int x, int y) nativeAdd =
    ffiLib
        .lookup<NativeFunction<Int32 Function(Int32, Int32)>>("count")
        .asFunction();
    int a = nativeAdd(3,2);
    
    print(a);

输出结果:

I/flutter ( 6975): 5
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容