Expo EAS Build构建Android应用始终以SDK 34为目标,已在app.json设置targetSdkVersion为35仍不生效
我之前在使用Expo SDK 52搭配EAS Build时,也碰到过类似的SDK版本不生效的问题,结合你的配置和报错信息,给你几个针对性的排查和解决步骤:
一、补全EAS Build的Android SDK版本显式配置
你当前仅在app.json里设置了compileSdkVersion和targetSdkVersion,但对于EAS Build来说,尤其是开启了New Architecture(你已经设置newArchEnabled: true)的场景,仅靠app.json的配置可能优先级不足,推荐用以下两种方式补全配置:
方案1:在eas.json中给各构建profile显式指定SDK版本
修改你的eas.json,在development、preview、production的Android配置中,直接添加SDK版本声明:
"build": { "development": { "developmentClient": true, "distribution": "internal", "android": { "compileSdkVersion": 35, "targetSdkVersion": 35 } }, "preview": { "distribution": "internal", "android": { "compileSdkVersion": 35, "targetSdkVersion": 35 } }, "production": { "autoIncrement": true, "android": { "buildType": "app-bundle", "compileSdkVersion": 35, "targetSdkVersion": 35 } } }
方案2:通过本地build.properties文件强制覆盖版本
在项目根目录创建android/build.properties文件(如果没有的话),添加以下内容:
android.compileSdkVersion=35 android.targetSdkVersion=35 android.buildToolsVersion=34.0.0
这个文件的配置优先级高于app.json,能直接让Gradle构建时使用指定的SDK版本,对New Architecture项目的适配性更好。
二、解决本地构建失败的独立问题
你提到的本地构建报错,是本地环境配置缺失导致的,和EAS Build的云端构建问题是两回事:
Failed to apply plugin 'com.facebook.react.rootproject'.
A problem occurred configuring project ':app'.
... set the sdk.dir path in your project's local properties file ...
解决方法很直接:
- 如果你用的是本地Android开发环境,确保已经配置了
ANDROID_HOME环境变量,指向你的Android SDK安装路径; - 或者在本地生成的
android目录下,创建local.properties文件,添加sdk.dir=/你的Android SDK完整路径(比如Mac下是/Users/你的用户名/Library/Android/sdk,Windows下是C:\\Users\\你的用户名\\AppData\\Local\\Android\\Sdk)。
三、提前验证配置是否生效的小技巧
在提交EAS Build之前,可以先在本地生成原生项目文件验证配置:
- 运行
npx expo prebuild --platform android(managed项目执行这个命令会生成原生目录,事后如果不需要可以直接删除); - 打开
android/app/build.gradle文件,检查compileSdk、targetSdk的值是否已经变成35,如果这里配置正确,说明你的设置已经生效,再提交EAS Build就会使用指定的SDK版本了。
另外,你当前的EAS CLI和Expo CLI版本已经比较新,但可以再运行npm install -g eas-cli expo-cli升级到最新版,避免版本兼容带来的隐性问题。
内容来源于stack exchange




