gpt4 book ai didi

android - 使用 Flutter 在 Android 上从本地编译的共享库调用函数

转载 作者:行者123 更新时间:2023-11-28 04:04:16 28 4
gpt4 key购买 nike

我已按照 https://flutter.dev/docs/development/platform-integration/c-interop 中的说明进行操作并已使用 c abi 成功编译 cpp 并使用 CMake 集成在模拟的 android 设备上使用 dart:ffi 调用它。这会编译一个 lib*.so 文件,将其与 flutter 包一起复制并放置,以便我可以在我的 flutter 代码中轻松访问它。

但是,假设我已经有一个已编译的共享库,要么是我自己编译的,要么是在使用 CMake 之外的某个地方获得了适用于 Android 及其给定 cpu 架构的地方。

我如何将它添加到 flutter 系统中,以便将其复制并放置在“可解析”位置,就像添加时所做的那样

android {
//...
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}

在包中的 CMake 文件中添加目标?

有关详细信息,我已经使用 cargo-ndk 和正确的架构在 rust 中编译了一个共享库,但是无论我有什么,我只会在尝试使用 `ffi.DynamicLibrary.open(...) 打开它时出错尝试过。

我猜这是一些非常简单的事情,但我想不出办法。

我的 dart ffi.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']
}
}
}

之后,您应该能够使用 Dart 的 DynamicLibrary.open 和 Java 的 System.loadLibrary 加载它。

关于android - 使用 Flutter 在 Android 上从本地编译的共享库调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59012340/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com