簡體   English   中英

Flutter / Dart FFI existing.so文件為Android

[英]Flutter / Dart FFI existing .so file for Android

我正在嘗試將 pre-compiled.so 文件與 Flutter/Dart FFI 一起使用。

我已經用 dart-ffigen 生成了綁定,這似乎沒有任何問題。

我已將以下內容添加到android塊內的 build.gradle 文件中。

    externalNativeBuild {
        // Encapsulates your CMake build configurations.
        cmake {
            // Provides a relative path to your CMake build script.
            path "CMakeLists.txt"
        }
    }

CMakeLists.txt:

cmake_minimum_required(VERSION 3.4.1)  # for example

find_library( stl_android
             ../ios/Classes/libstl.so )

add_library( stl_android SHARED IMPORTED )

我還嘗試了 FFI 頁面上記錄的 cmakelists.txt 文件,但這給出了一個與它相關的異常,不知道 .so 文件的語言。 我假設那是因為它是一個編譯庫,而不是源代碼。

在 Dart 中,我使用以下代碼:

Platform.isAndroid
        ? DynamicLibrary.open('libstl.so')
        : DynamicLibrary.process();

但這給出了以下異常:

Invalid argument(s): Failed to load dynamic library 'libstl.so': dlopen failed: library "libstl.so" not found

我不完全確定我在這里做錯了什么,我希望 makelist 文件中的某些東西是錯誤的。

我用這個 CMakeLists.txt 解決了這個問題

add_library(
        stl_android
        SHARED
        IMPORTED
        GLOBAL
)
set_target_properties(stl_android PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libstl.so)

需要在以下目錄添加.so文件:

  • android/app/src/main/jniLibs/arm64-v8a
  • android/app/src/main/jniLibs/armeabi-v7a
  • android/app/src/main/jniLibs/x86
  • android/app/src/main/jniLibs/x86_64

以及您可能想要支持的任何其他平台。

當然,需要為正確的目標編譯 .so 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM