tro*_*dhe 4 c++ android ffi dart flutter
我已按照https://flutter.dev/docs/development/platform-integration/c-interop 上的说明进行操作,并成功地使用 ac abi 编译了 cpp,并在使用 CMake 集成的模拟 android 设备上使用 dart:ffi 调用了它. 这将编译一个lib*.so文件,将它与 flutter 包一起复制并放置,以便我可以在我的 flutter 代码中轻松访问它。
但是,假设我已经有一个已编译的共享库,要么是自己编译的,要么是在使用 CMake 之外与 Android 及其给定的 cpu 架构一起使用的某个地方。
我如何将它添加到颤振系统,以便将它复制并放置在一个“可解析”的位置,就像添加时所做的一样
android {
//...
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
Run Code Online (Sandbox Code Playgroud)
将目标添加到带有包的 CMake 文件中?
有关详细信息,我已经使用 cargo-ndk 和正确的架构编译了一个 rust 共享库,但是无论我尝试过什么,我只会在尝试使用 `ffi.DynamicLibrary.open(...) 打开它时出错。
我猜它的东西非常简单,但我想不出办法。
我的 dartffi.DynamicLibrary代码链接到 Windows 上的本机库没有问题。所以似乎主要是Android/flutter/gradle打包问题。
要添加预编译共享库,您需要将它放在android/app/src/main/jniLibs/X文件夹中,其中 X 是体系结构名称(armeabi-v7a 或 arm64-v8a)。虽然它是库的默认路径,但我不确定是否有必要,但将此文件夹指定为build.gradle 中的源集可能更安全:
android {
sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
}
}
}
Run Code Online (Sandbox Code Playgroud)
之后,您应该能够使用 DartDynamicLibrary.open和 Java 的System.loadLibrary.
| 归档时间: |
|
| 查看次数: |
1361 次 |
| 最近记录: |