簡體   English   中英

Flutter - Java 通過 MethodChannel 調用 C++

[英]Flutter - Java calling C++ via MethodChannel

I am trying to create a Flutter application that will be utilizing MethodChannel to call some Java code using dart that will be calling a shared library written in C++.

我能夠編譯一個 Java 程序,該程序鏈接到使用 JNI 的 C++ 庫並運行它,但是一旦我嘗試將文件導入 Flutter 文件的路徑。 .

我正在尋求有關如何配置 Flutter 及其 Android 文件的幫助,以便能夠實現此行為。

我將添加我使用的 CMakeLists.txt,以便編譯和鏈接.jar 和.so。

CMakeLists.txt

cmake_minimum_required(VERSION 3.7 FATAL_ERROR)

project(shared_library_java_cpp VERSION 1.0.0 LANGUAGES CXX)
set(JAVA_AWT_LIBRARY NotNeeded)
set(JAVA_JVM_LIBRARY NotNeeded)
set(JAVA_INCLUDE_PATH2 NotNeeded)
set(JAVA_AWT_INCLUDE_PATH NotNeeded)

find_package(JNI REQUIRED)
find_package(Java REQUIRED)
include_directories(${JNI_INCLUDE_DIRS})
include(UseJava)

set(CMAKE_CXX_STANDARD 11)
set(CMALE_CXX_STANDARD_REQUIRED ON)
set(JAR_NAME JavaCPP)
set(JAVA_SOURCE_DIRECTORY "/Users/user/Desktop/Temp/com/example/javacpplib")
set(JAVA_SOURCE_FILES ${JAVA_SOURCE_DIRECTORY}/JavaCPP.java)
add_jar(${JAR_NAME} ${JAVA_SOURCE_FILES})

add_library(shared_library_java_cpp SHARED java_cpp.cpp java_cpp.def)
add_executable(java_cpp_exec java_cpp.cpp)

set_target_properties(shared_library_java_cpp PROPERTIES
    PUBLIC_HEADER lib_java_cpp.h
    VERSION ${PROJECT_VERSION}
    SOVERSION 1
    OUTPUT_NAME "java_cpp"
    XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "MacOS_ID"
)

除了在 intelliJ 中運行代碼之外,我還使用此方法加載共享庫:

static {
        System.load("/Users/user/IdeaProjects/JavaCPP/src/lib_java_cpp.so");
    }

我不確定在 flutter 中運行時應該加載哪個庫。

我找到了解決這個問題的方法。 在創建 a.jar 文件和 a.so 文件后,我將 that.so 添加到文件夾android -> app -> src -> main -> jniLibs -> arm64-v8a然后我添加了這一行:

android {
...
    sourceSets {
        ...
        main.jniLibs.srcDirs += 'src/main/jniLibs'
    }
...
}

到 app/build.gradle 文件

我補充說:

set(JNI_LIBS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/app/src/main/jniLibs/${ANDROID_ABI})

add_library(lib_java_cpp
            SHARED
            IMPORTED)

set_target_properties(lib_java_cpp
            PROPERTIES IMPORTED_LOCATION
            ${JNI_LIBS_DIR}/lib_java_cpp.so)

...

到 android/CMakeLists.txt 文件。

最后我在 MainActivity 中調用System.loadLibrary("_java_cpp")來加載所需的庫,並能夠從使用 ZF6F87C9FDCF8B38C3F07F93FEE1 的 jar 調用 Java 函數 (調用后會自動添加庫以查找正確的共享對象)

暫無
暫無

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

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