使用Expo EAS Build构建Android应用时执行gradlew崩溃求助
你在使用Expo SDK47 + EAS Build构建React Native Android应用时,run gradlew环节出现编译错误,核心问题是找不到CodePushDeploymentKey符号,错误片段如下:
[stderr] /home/expo/workingdir/build/android/app/build/generated/rncli/src/main/java/com/facebook/react/PackageList.java:84: error: cannot find symbol
[stderr] new CodePush(getResources().getString(com.myapp.com.myapp.R.string.CodePushDeploymentKey), getApplicationContext(), com.myapp.com.myapp.BuildConfig.DEBUG),
[stderr] ^
[stderr] symbol: variable CodePushDeploymentKey
[stderr] location: class string
以下是针对性的解决建议:
检查资源文件中的密钥定义
打开Android项目的res/values/strings.xml,确认存在CodePushDeploymentKey的正确定义,格式如下:<string name="CodePushDeploymentKey">你的CodePush部署密钥</string>注意名称大小写、拼写必须完全匹配,不能有多余空格或符号。
修复重复的包名引用
错误日志里出现com.myapp.com.myapp.R.string,明显是包名重复。检查android/app/build.gradle中的applicationId配置,确保值为正确的单级包名(比如com.myapp),生成的PackageList.java中引用应该是com.myapp.R.string.CodePushDeploymentKey。验证EAS Build的环境变量配置
如果通过环境变量注入密钥,确保eas.json的build profile中正确配置了环境变量:"build": { "production": { "env": { "CODEPUSH_DEPLOYMENT_KEY": "你的生产环境部署密钥" } } }同时要保证项目中存在对应的变量替换逻辑,比如gradle脚本或资源文件占位符能正确获取该环境变量。
清理构建缓存后重试
执行构建时添加清理缓存参数,避免旧的生成文件干扰:eas build --platform android --clear-cache也可以手动删除本地
android/app/build目录后再触发远程构建。确认CodePush依赖版本兼容性
检查package.json中的react-native-code-push版本,确保与Expo SDK47兼容。SDK47推荐使用^7.0.0系列版本,版本不匹配可能导致资源生成异常。
内容的提问来源于stack exchange,提问作者Alon Eyal

