flutter调用go

news/2024/10/30 17:20:20/

文章目录

          • 命令
          • 引入greeting.aar和使用
          • android中使用Flutter2gopluginPlugin.kt
          • 参考文档

命令

mkdir demo
cd demo
go mod init demo
编写greeting.go
go env -w GOPROXY=https://goproxy.cn
go install golang.org/x/mobile/cmd/gomobile@latest
gomobile init
go get golang.org/x/mobile/bind
gomobile bind -target=android
会生成greeting.aar和greeting-sources.jar

greeting.go


package greeting
func SayHi(text string) string {return text
}
引入greeting.aar和使用

创建flutter插件
在android下面创建libs
复制greeting.aar到libs下面
配置android/build.gradle

   
group 'com.app.flutter2goplugin'
version '1.0-SNAPSHOT'buildscript {ext.kotlin_version = '1.7.10'repositories {google()mavenCentral()}dependencies {classpath 'com.android.tools.build:gradle:7.2.0'classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"}
}allprojects {repositories {google()mavenCentral()}
}apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'android {compileSdkVersion 31compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = '1.8'}sourceSets {main.java.srcDirs += 'src/main/kotlin'}defaultConfig {minSdkVersion 16}
}rootProject.allprojects{repositories {google()mavenCentral()flatDir {dirs project(':flutter2goplugin').file('libs')}}
}dependencies {implementation(name: "greeting", ext: "aar")
}
android中使用Flutter2gopluginPlugin.kt

package com.app.flutter2gopluginimport android.util.Log
import androidx.annotation.NonNull
import greeting.Greetingimport io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Resultclass Flutter2gopluginPlugin : FlutterPlugin, MethodCallHandler {private lateinit var channel: MethodChanneloverride fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {channel = MethodChannel(flutterPluginBinding.binaryMessenger, "flutter2goplugin")channel.setMethodCallHandler(this)}override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {if (call.method == "getPlatformVersion") {Log.e("getPlatformVersion", Greeting.sayHi("bbbbbbbbbbb"))result.success("Android ${android.os.Build.VERSION.RELEASE}")} else {result.notImplemented()}}override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {channel.setMethodCallHandler(null)}
}
参考文档

完整流程 Flutter 集成 Golang 多语言跨端开发基础案例


http://www.ppmy.cn/news/33053.html

相关文章

第九章:C语言数据结构与算法初阶之堆

系列文章目录 文章目录系列文章目录前言一、堆的定义二、堆的实现三、堆的接口函数1、初始化2、销毁3、插入4、删除5、判空6、元素个数四、堆排序1、建堆2、排序五、堆的应用——TOPK1、什么是TOPK问题?2、解决方法总结前言 堆就是完全二叉树。 一、堆的定义 我们…

Springboot新手开发 Cloud篇

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:后端专栏 📧如果文章知识点有错误的地方,…

URLConnection/JNI

目录 URLConnection SSRF JNI安全基础 构建动态链接库供Java调用 JNI-定义native方法 JNI-生成类头文件 JNI-编写C/C本地命令执行实现 主函数调用 URLConnection 在java中,java抽象出来了一个URLConnection类,它用来表示应用程序以及与URL建立通…

进程和线程的区别和联系

进程和线程的区别和联系1. 认识线程2. 进程和线程的关系3. 进程和线程的区别4. 线程共享了进程哪些资源1. 上下文切换2. 线程共享了进程哪些资源1.代码区2. 数据区3. 堆区1. 认识线程 线程是进程的一个实体,它被包含在进程中,一个进程至少包含一个线程,一个进程也可以包含多个…

[ 系统安全篇 ] 拉黑IP - 火绒安全软件设置IP黑名单 windows使用系统防火墙功能设置IP黑名单

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

抛弃 TCP 和 QUIC 的 HTTP

下班路上发了一则朋友圈: 周四听了斯坦福老教授 John Ousterhout 关于 Homa 的分享,基本重复了此前那篇 It’s Time To Rep… 的格调,花了一多半时间喷 TCP… Ousterhout 关于 Homa 和 TCP 之间的论争和论证,诸多反复回执&…

PyTorch深度学习实战 | 搭建卷积神经网络进行图像分类与图像风格迁移

PyTorch是当前主流深度学习框架之一,其设计追求最少的封装、最直观的设计,其简洁优美的特性使得PyTorch代码更易理解,对新手非常友好。本文为实战篇,介绍搭建卷积神经网络进行图像分类与图像风格迁移。1、实验数据准备本文中准备使…

华为nat配置实验:内网能够访问外网,内网服务器80端口映射出去

一 需求分析1.1 需求公司A在北京,公司B在上海,本次实验仅仅模拟局域网内出口路由器的配置,公司A业务流量较大,并且预算有限。公司B模拟外网的一个小型局域网,要求公司B的主机能够访问公司A的web服务器。1.2 分析采用na…