背景
自从抖音上线web版后不久,旧版的无水印接口就开始失效了,需要找新的官方接口。
但是新的官方接口开始接入x-bogus算法,需要用golang的一个js虚拟机来生成x-bogus签名,这里就需要将golang打包到flutter中使用。
资料
embed
库可以将资源文件一起打包成二进制,比如js、image等。
import "C"
作用于将golang
函数导出给外部调用,部分入参和返回的数据类型也要用这个库进行转换,比如字符串。
github.com/dop251/goja
这个库用于运行js文件,作为一个js虚拟机。
编码
打包脚本
演示系统是windows环境
- 修改
ANDROID_NDK_HOME
变量为你的ndk
目录
- 实际上如果没有其他平台兼容打算的话,比如不去兼容一些老设备,这时只需要编译
arm64-v8a
即可。
执行完脚本后会在bin
目录中生成对应平台的so
动态库文件。
flutter项目配置
添加依赖dart pub add -d ffigen
将golang
代码生成的.h
头文件复制到flutter工程目录中,可以自由放置。比如我将其放置在lib/ffi
目录。
将golang
代码生成的bin
目录下的所有内容复制到flutter工程的android/libs
目录中。然后在app/bild.gradle
文件中加入以下代码
修改pubspec.yaml
,增加以下配置
运行dart run ffigen
,此时会生成一个libhello.h.dart
文件。接下来编写dart快捷代码
新建dart文件lib/ffi/HelloFFi.dart
踩坑
so
文件名必须以lib
开头,否则release
模式下会找不到so
文件,而debug
模式下正常
使用//export
导出函数时,//
不能有空格。