React Native通过JNI集成C++代码Android端构建失败如何解决?
问题排查与解决方法
已定位的错误点
- HelloWorldModule.java存在语法错误:类继承语句中的
ReactContextBaseJavaModule被注释掉,导致类定义非法,编译直接失败 - build.gradle配置缺失:未指定NDK编译的构建脚本路径,Gradle不会自动编译你写的JNI C代码
- build.gradle导入错误:
com.android.build.OutputFile导入适配问题,该导入在AGP 7.0+版本后包路径变更,RN 0.60+版本默认不需要该导入 - 架构配置冲突:Application.mk中配置
APP_ABI = all和build.gradle中ndk的abiFilters配置冲突,会导致编译产物架构不匹配 - 大概率缺失导入语句:MainApplication.java中未导入
MyReactPackage类,会报类找不到错误
具体修复步骤
- 修复HelloWorldModule.java的类定义,去掉父类的注释:
public class HelloWorldModule extends ReactContextBaseJavaModule { // 其余原有代码保持不变 }
- 修复android/app/build.gradle配置
- 先删除文件顶部的
import com.android.build.OutputFile整行代码 - 在android块内添加externalNativeBuild配置,指定Android.mk路径:
android { ndkVersion rootProject.ext.ndkVersion compileSdkVersion rootProject.ext.compileSdkVersion // 新增下面这段配置 externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } } defaultConfig { // 原有配置保持不变,可调整abiFilters补全常用架构 ndk { abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64" moduleName "hello_world_jni" ldLibs "log" cFlags "-std=c99" } } } - 先删除文件顶部的
- 删除android/app/src/main/jni/Application.mk中的
APP_ABI = all配置,以build.gradle中的abiFilters配置为准 - 检查MainApplication.java顶部的导入语句,确认添加了以下导入:
import com.thebhwgroup.demo.MyReactPackage; import java.util.Arrays;
- 清理缓存后重新构建:
依次执行以下命令:cd android ./gradlew clean cd .. react-native run-android
内容的提问来源于stack exchange,提问作者Jungwon
相关产品推荐
相关产品推荐

