flutter调用c/c++方法并在项目中使用(记录)
1、在vscode中使用指令新建一个plugin项目:flutter create -t plugin native_add
2、在新建的native_add项目中,新建native_add.cpp文件,并放到ios/Classes/,如下图
3、native_add.cpp添加两个方法
#include <stdint.h>
extern "C" {
// __attribute__((visibility("default"))) __attribute__((used))
int32_t native_add(int32_t x, int32_t y) { return x + y; }
double double_add(double x, double y) { return x + y; }
}
4、在andriod目录下,新建CMakeLists.txt
cmake_minimum_required(VERSION 3.4.1) # for example
add_library( native_add
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
../ios/Classes/native_add.cpp )
5、android/build.gradle文件
android{
// ...
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
6、在lib/native_add.dart下添加内容
import 'dart:async';
import 'package:flutter/services.dart';
import 'dart:ffi'; // For FFI
import 'dart:io'; // For Platform.isX
final DynamicLibrary nativeAddLib = Platform.isAndroid
? DynamicLibrary.open("libnative_add.so")
: DynamicLibrary.process();
final int Function(int x, int y) nativeAdd =
nativeAddLib
.lookup<NativeFunction<Int32 Function(Int32, Int32)>>("native_add")
.asFunction();
class NativeAdd {
static const MethodChannel _channel =
const MethodChannel('native_add');
static Future<String> get platformVersion async {
final String version = await _channel.invokeMethod('getPlatformVersion');
return version;
}
}
7、在example/lib/main.dart中使用
8、在vscode的terminal窗口,使用cd example,进入native_add项目的example目录,并执行flutter run,测试是否能成功调用nativeAdd方法
9、测试结果:nativeAdd(1,2)等于3
10、在新的flutter项目中引用native_add项目插件,先新建flutter项目:flutter_app_1
11、flutter_app_1项目的pubspec.yaml文件添加依赖包
参考
flutter依赖包
native_add:
path: ../native_add/
12、flutter_app_1项目main.dart文件,引入native_add包,并在Text组件调用nativeAdd(1,2)方法
import "package:native_add/native_add.dart";
13、运行flutter_app_1项目