将OneSignal集成至Expo分离的React Native项目后Android Studio构建失败
解决Expo分离后React Native集成OneSignal的Android构建失败问题
嘿,我来帮你排查下这个问题!从你给出的Gradle片段来看,里面还留着Fabric相关的配置——这玩意儿早就被Google废弃停止服务了,很大概率是它和OneSignal的依赖产生了冲突,再加上Expo eject后的项目有自己特殊的Gradle结构,得针对性调整OneSignal的集成步骤才行。下面是一步步的解决办法:
1. 先清理过时的Fabric配置
这是最常见的坑,先把Fabric相关的内容全删掉:
- 删掉
buildscript里的maven { url 'https://maven.fabric.io/public' }仓库配置 - 删掉
buildscript.dependencies里的classpath 'io.fabric.tools:gradle:1.+' - 删掉
apply plugin: 'io.fabric'这一行
留着这些废弃的配置只会添乱,先清掉再说。
2. 适配Expo分离项目的OneSignal Gradle配置
Expo eject后的项目,android/build.gradle和android/app/build.gradle有固定结构,你得按下面的方式调整:
调整android/build.gradle
在buildscript和allprojects的仓库、依赖里添加OneSignal需要的内容:
buildscript { repositories { // 保留你原有的google()、jcenter()等仓库,新增下面这行: maven { url 'https://plugins.gradle.org/m2/' } } dependencies { // 保留原有的gradle插件、google-services等依赖,新增OneSignal的classpath: classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.10, 0.99.99]' } } allprojects { repositories { // 保留原有的仓库,新增这两个: maven { url 'https://maven.google.com' } maven { url 'https://plugins.gradle.org/m2/' } } }
调整android/app/build.gradle
在正确的位置应用OneSignal插件并添加依赖:
// 一定要放在apply plugin: 'com.android.application'之后! apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin' android { // 检查下compileSdkVersion至少33,minSdkVersion至少21,OneSignal对版本有要求 // 保留你原有的其他配置 } dependencies { // 保留原有的所有依赖,新增OneSignal的RN包: implementation project(':react-native-onesignal') } // 可选:如果需要自定义OneSignal的gradle行为,在文件末尾加这个 onesignal { manifestKeep true }
3. 同步Gradle并清理缓存
做完配置调整后,先同步再清理构建缓存:
- 打开Android Studio,点
File -> Sync Project with Gradle Files - 然后点
Build -> Clean Project,接着Build -> Rebuild Project - 嫌IDE操作麻烦的话,终端里跑:
cd android && ./gradlew clean && ./gradlew assembleDebug
4. 检查包版本兼容性
确保你装的react-native-onesignal版本和你的React Native版本匹配,RN 0.60+建议用最新的5.x版本。可以看看package.json里的版本,不对的话升级:
npm install react-native-onesignal@latest --save
5. 补全AndroidManifest配置
别忘了在android/app/src/main/AndroidManifest.xml里加OneSignal需要的权限和配置:
<!-- 放在manifest标签下 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 放在application标签内 --> <meta-data android:name="com.onesignal.NotificationOpened.DEFAULT" android:value="DISABLE" />
如果做完这些还是失败,把完整的构建错误日志贴出来吧——比如是依赖冲突、版本不兼容还是某个配置漏了,日志能帮我们更快定位问题~
内容的提问来源于stack exchange,提问作者dor.elmaliach
相关产品推荐
相关产品推荐

