30 votes

Comment enregistrer un module React Native C++ dans Android

J'ai un module React Native C++ dérivé de facebook::xplat::module::CxxModule . Cela fonctionne bien avec le projet iOS, mais j'essaie maintenant de comprendre comment l'utiliser depuis Java. La seule documentation que j'ai trouvée est le commentaire dans la base de code de React Native indiquant que :

Les NativeModules dont l'implémentation est écrite en C++ doivent ne pas fournir de code Java (afin qu'ils puissent être réutilisés sur d'autres plateformes), et doivent plutôt s'enregistrer en utilisant CxxModuleWrapper

Ma question est la suivante : comment enregistrer un module C++ en Java à l'aide de CxxModuleWrapper ?

3 votes

"Votre question est vraiment comment appeler C++ depuis javascript sans appeler java je suppose (si possible) ?" - Non, je peux simplement utiliser JNI et appeler n'importe quelle bibliothèque C++ facilement, le problème ici est que je vais devoir faire toute la conversion de données et que je vais devoir implémenter tous les callbacks et promesses pour communiquer avec le côté JS. Cela pourrait être évité en utilisant un module C++ hérité de facebook::xplat::module::CxxModule . J'ai un tel module et je peux l'utiliser depuis Objective C mais pas depuis Java.

0 votes

Pouvez-vous utiliser un outil pour générer des liaisons, comme ceci

2voto

Geng Jiawen Points 85

Veuillez consulter ce blog pour plus de détails : https://medium.com/@kudochien/how-to-write-a-react-native-cxxmodule-59073259f15d . Extrait du blog :

L'exporter à partir de sa langue maternelle

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

Enregistrez-le en 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();
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X