android - 如何生成 React Native Android jni 库

标签 android react-native android-ndk java-native-interface

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

但是我得到一个错误:

Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: Android.mk

最佳答案

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


我想出了如何生成这些 .so 文件:

  1. 在 React Native 源代码中我找到了这个 build.gradle file有一个 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
    
  3. 将上面命令中的 ~/.../react-native 替换为 react-native 存储库的路径。

  4. 正如我收到的错误一样,Android NDK: Module reactnativejni depends on undefined modules: fbjni and ~/Library/Android/sdk/ndk-bundle/toolchains/arm-linux- androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++:找不到命令。为了解决这个问题,我不得不切换到旧版本的 NDK:
    1. here 下载并提取 Android NDK,修订版 10e(2015 年 5 月) .
    2. 将上述命令中的路径 ~/Library/Android/sdk/ndk-bundle/ndk-build 更改为解压文件夹的 ndk-build 文件。
  5. 生成的 .so 文件将在 react-native/ReactAndroid/build/react-ndk/all 中。

关于android - 如何生成 React Native Android jni 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47005026/

相关文章:

android - 如何重写 onCreateDialogView() 并在dialogpreference中添加自定义 View

javascript - 如何清除 react native webview cookies?

android - 如何在 react-native 上使用 svg 图像?

Android 致命信号 11 (SIGSEGV) 位于 0x636f7d89 (code=1)。如何追踪它?

android - 多个apk versionCode区分

android - 无法使用 android-ndk 和 Android Studio 构建项目

安卓文件关联

android - 禁用 PRAGMA recursive_triggers

android - 使用谷歌翻译的文本

javascript - 如何字符串到 React Native 组件