如何生成 React Native 的 Android jni 库

Lir*_*dav 1 java-native-interface android android-ndk react-native

Android 上的 React Native 有一些 C/C++ 代码可以编译为 .so 文件。我如何构建这些 .so 文件?我认为这与https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/jni/Application.mk有关。

我尝试创建一个新的 React Native 项目并从项目根运行以下命令:

NDK_PROJECT_PATH=node_modules/react-native/ReactAndroid/src/main $ANDROID_HOME/ndk-bundle/ndk-build
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: Android.mk
Run Code Online (Sandbox Code Playgroud)

Lir*_*dav 5

更新:有关更多官方说明,您可以按照 React Native 文档中的步骤从源代码构建。从源代码构建将运行buildReactNdkLib Gradle 任务来构建这些 .so 文件。


我弄清楚了如何生成这些 .so 文件:

  1. 在 React Native 源代码中,我发现这个build.gradle 文件有一个buildReactNdkLib任务。
  2. 我捕获了它运行的命令,在我的例子中是:

    ~/Library/Android/sdk/ndk-bundle/ndk-build NDK_PROJECT_PATH=null NDK_APPLICATION_MK=~/.../react-native/ReactAndroid/src/main/jni/Application.mk NDK_OUT=~/.../react-native/ReactAndroid/build/tmp/buildReactNdkLib NDK_LIBS_OUT=~/.../react-native/ReactAndroid/build/react-ndk/all THIRD_PARTY_NDK_DIR=~/.../react-native/ReactAndroid/build/third-party-ndk REACT_COMMON_DIR=~/.../react-native/ReactAndroid/../ReactCommon -C ~/.../react-native/ReactAndroid/src/main/jni/react/jni --jobs 4
    
    Run Code Online (Sandbox Code Playgroud)
  3. ~/.../react-native将上面的命令替换为react-native 存储库的路径。

  4. 我遇到了类似Android NDK: Module reactnativejni depends on undefined modules: fbjni和 的错误~/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++: Command not found。为了解决这个问题,我必须切换到旧版本的 NDK:
    1. 从此处下载并解压 Android NDK,修订版 10e(2015 年 5 月)。
    2. ~/Library/Android/sdk/ndk-bundle/ndk-build将上面命令中的路径更改为提取的文件夹的ndk-build文件。
  5. 生成的 .so 文件将位于react-native/ReactAndroid/build/react-ndk/all.