Android平台Expo内购模块配置编译失败求助
解决expo-in-app-purchases在Android编译时找不到Bundle类的问题
问题场景
我的React Native项目iOS平台内购功能运行正常,但引入Expo的in-app-purchases模块后,Android版本构建失败。已配置Play Store内购产品,并在清单文件中添加了<uses-permission android:name="com.android.vending.BILLING"/>权限,但编译仍报错。
环境信息:
- Android SDK版本:32
- expo-in-app-purchases版本:^13.1.0
核心错误堆栈:
/Users/uname/workspace/myproj/mobile/myproj/node_modules/expo-in-app-purchases/android/src/main/java/expo/modules/inapppurchases/UpdateListener.java:46: error: cannot find symbol ArrayList<Bundle> results = new ArrayList<>(); ^ symbol: class Bundle location: class UpdateListener
解决思路
1. 检查依赖版本匹配性
expo-in-app-purchases@13.1.0对应Expo SDK 46版本,先确认项目的Expo SDK版本是否与之匹配:
- 如果版本不兼容,升级/降级Expo SDK到46版本,或者调整expo-in-app-purchases到对应项目SDK的适配版本
- 执行
yarn install/npm install重新安装依赖,同时清理缓存:yarn cache clean或npm cache clean --force
2. 修复模块导入缺失(临时方案)
错误提示找不到Bundle类,是因为模块Java文件缺少导入语句:
- 打开
node_modules/expo-in-app-purchases/android/src/main/java/expo/modules/inapppurchases/UpdateListener.java - 在文件顶部添加导入:
import android.os.Bundle; - 重新构建项目
注意:该修改会在依赖重新安装后丢失,建议通过版本匹配彻底解决
3. 调整Gradle与构建工具配置
- 打开
android/build.gradle,确认compileSdkVersion设置为32,buildToolsVersion为32.0.0或兼容版本 - 检查Gradle版本是否适配Expo SDK 46(推荐Gradle 7.3.3),版本过低则升级
- 执行
cd android && ./gradlew clean清理构建缓存后再重新编译
4. 强制指定Billing Library版本
检查expo-in-app-purchases依赖的Google Play Billing Library是否兼容Android SDK 32,必要时在android/build.gradle中强制指定兼容版本:
dependencies { implementation 'com.android.billingclient:billing:5.2.0' }
内容的提问来源于stack exchange,提问作者Peter Lim
相关产品推荐
相关产品推荐

