java - 将自定义 Java 数据模型传递到我的 native 代码

标签 java android c++ java-native-interface android-native-library

我想我知道该怎么做,我只是想戳一下 SO 社区,看看我是否在正确的轨道上,因为我没有从我的研究中看到关于这个特定主题的任何信息。

我有一些自定义 Java(数据模型)类,我希望可以在我的应用程序的 native C++ 端访问这些类。我意识到这两个环境是相当独立的,所以我很可能必须用 C++ 创建我的数据模型的“拷贝”,并在我的 nativeLib JNI 文件中初始化它们?

我假设我不能只是将 java 类“转换”为 c++ 类,因为编译器可能无法进行此类转换。我必须通过 JNI 方法调用手动管理我需要的每个字段。

这是正确的,还是有我不知道的更好的方法?

我想一个例子可能是这样的:

Foo.java

public class Foo {
    boolean A;
    boolean B;
    boolean C;
}

native 库.cpp

extern "C" {

    std::unique_ptr<Foo> foo;

    JNIEXPORT void JNICALL
    Java_com_example_user_project_native_1Foo(JNIEnv *env, jobject instance, jbool jbooleanA, jbool jbooleanB, jbool jbooleanC) {

    Foo->setA(jbooleanA);
    Foo->setB(jbooleanB);
    Foo->setC(jbooleanC);
}

Foo.h

class Foo {
private:
    bool A;
    bool B;
    bool C;

public:
    // add setters & getters here, or any other needed functions
}

最佳答案

I'm assuming I can't just "convert" the java class to the c++ class, since the compiler probably won't be able to do such a conversion.

你的假设是对的。如果您寻求 native 和 Java 之间代理类的自动化,请查看 SWIG .它能够扫描头文件并构建将 native 类公开给 JVM 的包装器 (.cpp + .java) 代码。这不完全是您要问的问题,但可能非常接近。

关于java - 将自定义 Java 数据模型传递到我的 native 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57719005/

相关文章:

java - 如何使用 android 中的服务器改造来发出 POST 请求

android - 创建新 Activity 后应用程序崩溃

c++ - 在 C++ 中使用 std::allocator 而不是 new 有什么好处?

java - 不支持的类版本错误 ireport java maven v raptor

java - 如何在 IntelliJ IDEA 中生成私有(private) setter

java - 单击图像的一部分即可找到匹配的图像

c++ - 具有多个参数的 boost::static_visitor

用于 Android 应用程序的 Java 多维数组

java - 无法将 BufferedReader.readLine() 的结果保存到 String

C++ 意外的整数提升