使用EAS构建Expo Android应用时遭遇expo-location模块Kotlin编译失败问题
看起来你在用EAS构建Android应用时,被expo-location模块的Kotlin编译错误给卡住了——找不到UPSIDE_DOWN_CAKE和FOREGROUND_SERVICE_LOCATION这两个引用对吧?我来帮你拆解下问题原因和解决办法:
问题根源
这两个标识符都是**Android 14(API级别34)**才新增的:
UPSIDE_DOWN_CAKE是Android 14的版本代号常量FOREGROUND_SERVICE_LOCATION是Android 14新增的前台服务权限相关常量
你当前项目配置的compileSdkVersion和targetSdkVersion都是33(哪怕降到31也没用),但你用的expo-location版本已经适配了Android 14,导致编译器在低版本SDK环境下找不到这些新API的定义,自然就抛出编译错误了。
可行解决办法
这里给你几个实用方案,你可以根据自己的项目情况选择:
方案1:升级编译SDK版本到34
直接把项目的Android编译和目标SDK版本升到34,就能兼容这些新API了。修改你的app.json配置:
"expo-build-properties", { "android": { "usesCleartextTraffic": true, "compileSdkVersion": 34, "targetSdkVersion": 34 } }
修改完成后,建议执行eas build --clear-cache清除构建缓存,再重新触发构建,避免缓存残留导致的问题。
方案2:降低expo-location的版本
如果暂时不想升级SDK版本,可以回退到还未适配Android 14的expo-location稳定版本,比如expo-location@^15.1.1(这个版本是Android 14适配前的迭代版本):
- 修改
package.json里的expo-location版本号 - 执行
npm install或yarn install更新依赖 - 重新执行EAS构建
方案3:核对Expo SDK与依赖版本的兼容性
如果你的Expo SDK版本比较旧,也可能出现这种依赖版本不匹配的问题。建议确认你当前使用的Expo SDK版本,是否和expo-location版本兼容(比如Expo SDK 49对应的expo-location版本是否支持API 33),调整到匹配的版本组合即可。
备注:内容来源于stack exchange,提问作者IT EKOFOOD

