一、目的


本篇文章的目的是记录本人使用flutter加载与调用第三方aar包。


二、背景


本人go后端,业余时间喜欢玩玩flutter。一直有一个想法,go可以编译为第三方平台的可执行程序,而flutter可以是一个用于开发跨平台UI的工具,如果开发一个程序,go用于后台服务,flutter只用于描绘UI,是否可以做到。


查询了下github上的开源项目,有几个类似的:






上述三个,大致都是将flutter做为一个跨平台的UI工具来进行使用(思源不是flutter),然后使用第三方语言实现基本业务逻辑。


三、流程


问题:


  1. go如何打包为移动端的包


  1. flutter如何调用该包



问题一:go如何打包为移动端的包


1.环境配置


第一步需要解决的是环境配置,想打包安卓的包,肯定需要安卓的工具。


android studio


SDK ToolsNDK21.0.6113669


NDK解释:


Native Development KitAndroidCC++soAPKNDKAndroidJNI


show package detailsNDK21.0.6113669



2.go配置与打包


golang.org/x/mobile/cmd/gomobile


使用gomobile库可以将go程序打包为移动端的包


本项目程序截图:


StartKernel


在我本地,我增加了一个构建安卓aar包的脚本



执行该脚本,本地output会生成两文件:


  1. mobile-sources.jar -- 具体实现的可以看该包,内部提供了一些静态本地方法


  1. mobile.aar -- 我们真正需要的包



mobile-sources.jar内容:



好了,现在我们已经拿到了aar包了。


问题二:flutter如何调用aar


找半天文章,没有看到flutter直接调用aar包,如果你找到了请告诉我。


我现在的解决方案是参考官网的:用写插件的方式去实现,安卓加载aar,然后flutter再调用。


第一步:存放aar与修改gradle配置


在android文件夹下的app/libs 中放入mobile.aar文件,如果没有libs文件夹的话就创一个。


编辑app/build.gradle文件,增加如下代码:



注释的是本人尝试后有问题的使用方式,本人非安卓开发人员,不是很清楚为什么不能那么使用,如果你知道的话可以告诉下我,没有注释的是本人亲试没问题的加载方式。




第二步:修改MainActivity.java入口代码


参考该文章,实现 configureFlutterEngine 方法,通过向 configureFlutterEngine 注册方法,可以实现调用native的方法。


MethodChannel的名字与flutter代码约定好,必须一模一样。




第三步:flutter调用


简短写一下,调用还是挺简单的,MethodChannel("name"),name的名字必须要与java中约定的通道名称一致。




四、结论


总的来说难度没有那么大,在过去的时候尝试过类似操作,不过一直想的是flutter直接调用第三方平台库,错误的思路实现起来阻塞重重。


如果要调用第三方库,可以尝试做成一个flutter插件。





本文使用 文章同步助手 同步