如何生成React Native的Android jni库

时间:2017-10-29 20:42:11

标签: 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

1 个答案:

答案 0 :(得分:4)

更新:有关更多官方说明,您只需按照building from source的React Native文档中的步骤操作即可。从源代码构建将运行构建那些.so文件的buildReactNdkLib 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 repo的路径。

  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. 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