适用范围
- 移动平台:Android/iOS
- 桌面平台:Windows/macOS/Linux
- 其他:Fuchsia
官方文档
- dart:ffi dart.dev/guides/libr…
- dart:ffigen github.com/dart-lang/f…
- Flutter flutter.dev/docs/develo…
ffigen使用方法
其中包装并使用了 github.com/libusb/libu… 实现macOS/Linux端USB连接功能
环境
- Windows(10)
- macOS
- Linux(Ubuntu 18.04 LTS)
编译
准备llvm(9+)
- Windows: winget install -e --id LLVM.LLVM
- macOS: brew install llvm
- Linux: sudo apt install libclang-10-dev
编译libusb_xxx.dart
- Windows/Linux:
pub run ffigen
move lib/libusb.dart lib/libusb64.dart
Refactor timeval to timeval64
- macOS:
pub run ffigen
mv lib/libusb.dart lib/libusb32.dart
Refactor timeval to timeval32
贡献更新
准备libusb.h
Download xxx verion from github.com/libusb/libu… and extract libusb.h
准备libusb-1.0动态/静态库
- Windows: Download xxx version from github.com/libusb/libu… and extract
copy libusb-1.0.23\MS64\dll\libusb-1.0.dll libusb-1.0\
- macOS: Download xxx version from homebrew.bintray.com/bottles/lib… and extract
cp libusb/1.0.23/lib/libusb-1.0.dylib libusb-1.0/
- Linux: Download xxx version from old.kali.org/kali/pool/m… and install
cp /lib/x86_64-linux-gnu/libusb-1.0.so.0.xxx libusb-1.0/libusb-1.0.so
打包
- Android 把动态库放到app/src/main/jniLibs下,按照架构分类
- jniLibs
- armabi
- armabi-v7
- arm64-v8a
- x86
-
iOS 因为审核原因无法使用dlopen相关API,需要打包.a静态库到程序中
-
Windows/Linux
# List of absolute paths to libraries that should be bundled with the plugin
set(quick_usb_bundled_libraries
"${CMAKE_CURRENT_SOURCE_DIR}/libusb-1.0.23.dll"
PARENT_SCOPE
)
- macOS
Pod::Spec.new do |s|
# ...
s.vendored_libraries = 'libusb-1.0.23.dylib'
# ...
end