如何在Android中注册C++ React Native模块

30

我有一个C++ React Native模块,它派生自facebook::xplat::module::CxxModule。它在iOS项目中运行良好,但现在我正在试图弄清如何从Java中使用它。我找到的唯一文档是React Native代码库中的注释,其中说明:

其实现使用C++编写的NativeModules必须不提供任何Java代码(以便在其他平台上重用它们),而应该使用CxxModuleWrapper进行注册。

我的问题是如何使用CxxModuleWrapper在Java中注册C++模块。


3
你的问题实际上是如何在不调用java的情况下从javascript调用C++,我猜想(如果可能的话)?- 不,我可以使用JNI轻松调用任何C++库,这里的问题是我需要进行所有数据转换,并且必须实现所有回调和承诺来与JS端通信。使用继承自facebook::xplat::module::CxxModule的C++模块可以避免这种情况。我有这样一个模块,我可以从Objective C使用它,但不能从Java中使用。 - bjornd
你可以使用一些工具来生成绑定,比如这个 - Raviprakash
1个回答

2
请查看此博客以获取详细信息:https://medium.com/@kudochien/how-to-write-a-react-native-cxxmodule-59073259f15d。 博客摘录如下:

从本地导出

extern "C" HelloCxxModule* createHelloCxxModule() {
  return new HelloCxxModule();
}

在Java中注册它

public final class HelloCxxPackage implements ReactPackage {
  @Override
  public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
    return Arrays.<NativeModule>asList(
        // I have librnpackage-hellocxx.so the exported createHelloCxxModule() above.
        CxxModuleWrapper.makeDso("rnpackage-hellocxx", "createHelloCxxModule")
    );
  }
  @Override
  public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
    return Collections.emptyList();
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接