如何通过GitHub Action构建React Native可安装APK?
React Native项目通过GitHub Action生成可安装APK的配置优化
你的现有Workflow配置存在几个关键问题,导致无法正常生成可安装的APK,以下是修正后的完整配置及关键说明:
原配置的问题点
- 重复执行
npm install,浪费构建时间 - 未配置Android开发环境,Ubuntu默认缺少Android SDK,无法执行Gradle构建命令
upload-artifact使用旧版本,且路径指向目录而非具体APK文件- Release版本APK未做签名处理,未签名的APK无法直接安装到设备
修正后的Workflow配置
on: workflow_dispatch: # 保留手动触发,可按需添加自定义输入参数 name: Build Android Installable APK jobs: build-android: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v4 - name: 设置Node.js环境 uses: actions/setup-node@v4 with: node-version: 20 # 根据你的React Native版本调整,比如RN 0.68用Node 16 cache: 'npm' # 自动缓存node_modules,加速依赖安装 - name: 安装npm依赖 run: npm ci # 替代npm install,保证依赖版本与package-lock.json完全一致 - name: 配置Android SDK环境 uses: android-actions/setup-android@v3 - name: 生成签名密钥(已有密钥可跳过此步) run: | keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000 -storepass ${{ secrets.KEYSTORE_PASSWORD }} -keypass ${{ secrets.KEY_PASSWORD }} -dname "CN=Android Release,O=YourOrg,C=CN" env: KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - name: 配置Gradle签名信息 run: | echo "MYAPP_RELEASE_STORE_FILE=../my-release-key.keystore" >> android/gradle.properties echo "MYAPP_RELEASE_STORE_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> android/gradle.properties echo "MYAPP_RELEASE_KEY_ALIAS=my-key-alias" >> android/gradle.properties echo "MYAPP_RELEASE_KEY_PASSWORD=${{ secrets.KEY_PASSWORD }}" >> android/gradle.properties - name: 构建签名版Release APK run: cd android && ./gradlew assembleRelease - name: 上传APK产物 uses: actions/upload-artifact@v4 with: name: app-release-signed.apk path: android/app/build/outputs/apk/release/app-release.apk
关键配置说明
Node环境与依赖缓存
- 使用
actions/setup-node指定适配项目的Node版本,开启cache: 'npm'自动缓存node_modules,避免重复安装依赖 - 用
npm ci替代npm install,确保依赖版本严格匹配package-lock.json,构建更稳定
- 使用
Android SDK配置
- 通过
android-actions/setup-android自动安装Android SDK及构建所需工具,解决Ubuntu环境缺少Android开发环境的问题
- 通过
APK签名处理
- 若已有签名密钥文件,可跳过“生成签名密钥”步骤,直接将密钥文件上传到GitHub Secrets(或添加到仓库并在
.gitignore中排除),调整gradle.properties的配置路径即可 - 若无签名密钥,需在GitHub仓库的
Settings > Secrets and variables > Actions中添加KEYSTORE_PASSWORD和KEY_PASSWORD两个密钥,用于生成签名文件和配置Gradle - 只有签名后的Release APK才能直接安装到设备,未签名的Release APK无法正常安装
- 若已有签名密钥文件,可跳过“生成签名密钥”步骤,直接将密钥文件上传到GitHub Secrets(或添加到仓库并在
产物上传
- 使用最新版
actions/upload-artifact@v4,路径指向具体的APK文件,确保只上传最终可安装的产物
- 使用最新版
额外注意事项
- 若不需要正式Release版本,可将
assembleRelease改为assembleDebug,Debug版APK默认使用调试密钥签名,可直接安装,但不适合正式发布 - 确保项目的Android目录下的Gradle配置文件无语法错误,否则会导致构建失败
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

