如何通过GitHub Actions构建React Native安卓应用并解决构建报错
解决GitHub Actions构建React Native Android APK的Gradle堆内存错误
错误根源
报错核心是Java heap space,说明Gradle守护进程分配的内存不足,导致JetifyTransform处理React Native的aar依赖时发生内存溢出,进而中断构建流程。
具体解决方案
1. 调整Gradle JVM内存参数
在项目的android/gradle.properties文件中添加或修改以下配置,增大堆内存分配:
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
-Xmx4096m将最大堆内存设置为4GB,足以应对React Native依赖转换的内存需求。
2. 在GitHub Actions构建命令中直接指定内存参数
如果不想修改项目文件,可在Action的构建步骤中直接传递JVM参数:
修改Action.yml中的Build Android Release步骤:
- name: Build Android Release run: cd android && ./gradlew assembleRelease -Dorg.gradle.jvmargs="-Xmx4096m"
3. 优化GitHub Actions运行环境
缓存Gradle依赖:添加缓存步骤减少重复下载依赖的开销,提升构建效率:
- name: Cache Gradle dependencies uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('android/build.gradle', 'android/app/build.gradle', 'android/gradle/wrapper/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle-将此步骤放在Install dependencies之后、Build Android Release之前。
使用稳定运行环境:指定
ubuntu-22.04作为运行环境,比默认ubuntu-latest更稳定:runs-on: ubuntu-22.04
4. 升级Gradle版本(可选)
当前使用的Gradle 6.7与React Native 0.71.x兼容性一般,升级到7.x版本可优化内存管理:
- 修改
android/gradle/wrapper/gradle-wrapper.properties中的distributionUrl:distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip - 修改
android/build.gradle中的Gradle插件版本:dependencies { classpath("com.android.tools.build:gradle:7.4.2") // 保留其他原有依赖 }
完整Action配置(含构建、上传制品、设备测试)
修改后的Action.yml整合了上述优化,并添加了Android模拟器测试步骤:
name: Build Android on: push: branches: [main] jobs: build: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - name: Install dependencies run: yarn - name: Cache Gradle dependencies uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('android/build.gradle', 'android/app/build.gradle', 'android/gradle/wrapper/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - name: Build Android Release run: cd android && ./gradlew assembleRelease -Dorg.gradle.jvmargs="-Xmx4096m" - name: Upload Release APK uses: actions/upload-artifact@v3 with: name: android-release-apk path: android/app/build/outputs/apk/release/app-release.apk - name: Test APK on Android Emulator uses: reactivecircus/android-emulator-runner@v2 with: api-level: 33 script: | adb install -r android/app/build/outputs/apk/release/app-release.apk # 可添加自定义测试命令,例如启动应用:adb shell am start -n com.yourpackage.name/.MainActivity
内容的提问来源于stack exchange,提问作者Muhammad Afaq Nasir
相关产品推荐
相关产品推荐

