You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native本地运行正常但无法生成APK:ninja构建错误

React Native 0.71打包Release APK失败:ninja错误+StackOverflowError解决方案

问题概述

本地模拟器运行正常,但执行gradlew bundleRelease时出现两个关键错误:

ninja: error: manifest 'build.ninja' still dirty after 100 tries
java.lang.StackOverflowError

同时Gradle文件存在报错,已生成keystore,需解决问题以生成可上传Play Store的安装包。

依赖版本信息:

{
  "name": "gvpmobile",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "lint": "eslint .",
    "start": "react-native start",
    "test": "jest"
  },
  "dependencies": {
    "@react-native-async-storage/async-storage": "^1.19.2",
    "@react-native-picker/picker": "^2.4.10",
    "@react-navigation/drawer": "^6.6.3",
    "@react-navigation/native": "^6.1.7",
    "@react-navigation/native-stack": "^6.9.13",
    "react": "18.2.0",
    "react-native": "0.71.0",
    "react-native-gesture-handler": "^2.12.1",
    "react-native-gradle-plugin": "^0.71.19",
    "react-native-reanimated": "^3.4.2",
    "react-native-safe-area-context": "^4.7.1",
    "react-native-screens": "^3.24.0",
    "styled-components": "^6.0.7"
  },
  "devDependencies": {
    "@babel/core": "^7.12.9",
    "@babel/preset-env": "^7.14.0",
    "@babel/runtime": "^7.12.5",
    "@react-native-community/eslint-config": "^3.0.0",
    "@tsconfig/react-native": "^2.0.2",
    "@types/jest": "^29.2.1",
    "@types/react": "^18.0.24",
    "@types/react-test-renderer": "^18.0.0",
    "babel-jest": "^29.2.1",
    "eslint": "^8.19.0",
    "jest": "^29.2.1",
    "metro-react-native-babel-preset": "0.73.5",
    "prettier": "^2.4.1",
    "react-test-renderer": "18.2.0",
    "typescript": "4.8.4"
  },
  "jest": {
    "preset": "react-native"
  }
}

分步解决方案

1. 彻底清理构建缓存

ninja的dirty错误大多源于缓存冲突,先清理所有相关缓存:

  • 进入Android目录执行Gradle清理:
    cd android && ./gradlew clean
    
  • 删除本地构建目录:
    rm -rf android/app/build android/build
    
  • 重置React Native Metro缓存:
    npx react-native start --reset-cache
    

2. 调整NDK配置与并行编译

RN 0.71与部分NDK版本存在兼容性问题,且并行编译容易触发ninja错误:

  • 在android/build.gradle中指定稳定NDK版本(如25.2.9519653):
    buildscript {
        ext {
            ndkVersion = "25.2.9519653"
        }
        // 保留原有其他配置
    }
    
  • 在android/gradle.properties中关闭并行编译:
    org.gradle.parallel=false
    

3. 解决StackOverflowError(Gradle堆内存不足)

该错误是Gradle默认堆内存不足以处理打包任务导致的:

  • 修改android/gradle.properties中的JVM参数,增大堆内存:
    org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
    
    若机器内存充足,可将-Xmx4096m改为-Xmx6144m。

4. 修复Gradle文件报错

重点检查签名配置与依赖兼容性:

  • 签名配置校验:确保android/app/build.gradle中的signingConfigs配置正确匹配你的keystore信息:
    signingConfigs {
        release {
            storeFile file('your-keystore-file.jks') // 替换为你的keystore路径
            storePassword 'your-store-password' // 替换为密钥库密码
            keyAlias 'your-key-alias' // 替换为密钥别名
            keyPassword 'your-key-password' // 替换为密钥密码
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    
  • 依赖兼容性调整:react-native-reanimated@3.4.2与RN 0.71存在兼容性问题,建议降级到RN 0.71兼容的版本(如2.14.4):
    npm install react-native-reanimated@2.14.4 --save
    
    安装后需确保babel.config.js中添加了reanimated的插件配置:
    module.exports = {
        presets: ['module:metro-react-native-babel-preset'],
        plugins: ['react-native-reanimated/plugin'],
    };
    

5. 重新执行打包命令

完成上述调整后,重新执行打包命令:

  • 生成AAB(推荐上传Play Store):
    cd android && ./gradlew bundleRelease
    
  • 生成APK:
    cd android && ./gradlew assembleRelease
    

内容的提问来源于stack exchange,提问作者Nathan Quirino Bass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:35:37