我正在编写一个 Dart 库来使用 Flutter 访问 C 共享对象。
到目前为止,我创建的示例应用程序(在某种程度上)按预期工作,但我想包括单元测试也让库保持稳定。
细节:
- 共享对象在 APP/android/src/main/jniLibs/{abi}/liboqs.so
- example/lib/main.dart 中的示例应用程序并按预期工作
- 库位于 APP/lib/liboqs_flutter.dart
图书馆使用
static final ffi.DynamicLibrary _liboqs = Platform.isAndroid
? ffi.DynamicLibrary.open("liboqs.so")
: ffi.DynamicLibrary.process();
设置库。
但是当我尝试使用flutter_test访问这个库时(例如运行运行静态最终C本机函数OQS_init的init函数LiboqsFlutter.init(),我得到:
Failed to load "/{HOME DIRECTOR}/liboqs_flutter/test/liboqs_flutter_test.dart": Invalid argument(s): Failed to lookup symbol (dlsym(RTLD_DEFAULT, OQS_init): symbol not found)
我知道颤振测试无法访问“主要”资产,但我该如何强制通过它,以便我可以正确测试我的代码?
这个问题提供了两种解决方案:
- 使用flutter_driver
- 根据此示例代码,使用带有开启功能的 cmake 构建库。
但我并不完全了解如何让这些对我有用。颤振驱动程序如何在这里帮助我?应该将#2 代码添加到测试中还是原始库中并在测试中调用?如果我已经在 main/jniLibs 文件夹中预建了共享对象,我真的需要在测试时重建项目吗?这似乎浪费了很多时间来测试应用程序。