android - 反应原生 firebase 与 expo 裸应用程序的集成
问题描述
我有一个有趣的问题。我有一个 react native expo 项目,最低限度,所以它不使用任何 expo 服务器和所有服务器,它的纯 react native 项目包含在 react-native-unimodules 中。所以现在我想在其中集成 react-native-firebase,IOS 成功但在 android 上我面临多个问题,让我们从头开始。
1:首先我尝试做react-native link firebase...
,然后我重新检查所有链接是否已完成,例如检查 settings.gradle、MainApplicaiton.java 等,一旦一切就绪,运行后react-native run-android
。第一个问题我明白了
在 org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler 类型的对象上找不到参数 [com.google.firebase:firebase-bom:21.1.0] 的方法 platform()。
好的,所以我研究了一下,在我看到的任何地方,都有一个解决方案,升级 gradle。所以我将gradle升级到5.1.1,甚至尝试了其他几个,升级后我得到的错误是。
无法将任务“包装器”添加为具有该名称的任务已存在
因此,我再次进行了一些研究,然后尝试将其删除或添加此解决方案 无法添加任务“包装器”,因为具有该名称的任务已存在 它有效(有点),现在我遇到了另一个错误。
毕竟,当我尝试编译时,我得到了这个。
错误:清单合并失败:来自 [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 的属性 application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory)
我也尝试解决这个问题,添加googlePlayServices, firebase
我的分机等等。但是没有任何效果。
所以现在我被困住了,将 react-native-firebase 与 unimodules 集成起来非常重要。
帮助将不胜感激。我将在这里发布一些关于我的应用程序的信息,这个阶段将在我尝试集成任何东西之前。安卓/build.gradle
buildscript {
ext {
buildToolsVersion = "28.0.3"
minSdkVersion = 21
compileSdkVersion = 28
targetSdkVersion = 28
supportLibVersion = "28.0.0"
}
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
google()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
maven { url 'https://maven.google.com' }
maven { url "https://www.jitpack.io" }
}
}
//task wrapper(type: Wrapper) {
// gradleVersion = '4.7'
// distributionUrl = distributionUrl.replace("bin", "all")
//}
wrapper {
gradleVersion = '5.1'
distributionUrl = distributionUrl.replace("bin", "all")
}
我的依赖
dependencies {
implementation project(':@react-native-firebase_app')
implementation project(':appcenter-analytics')
implementation project(':appcenter')
implementation project(':react-native-splash-screen')
implementation project(':react-native-sms-retriever')
implementation project(':react-native-image-crop-picker')
implementation project(':@sentry-react-native')
implementation project(':react-native-config')
implementation project(':react-native-onesignal')
implementation project(':react-native-code-push')
implementation project(':@react-native-community_async-storage')
implementation project(':react-native-reanimated')
implementation project(':react-native-gesture-handler')
implementation project(':react-native-vector-icons')
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
implementation "com.facebook.react:react-native:+" // From node_modules
compile 'com.google.android.gms:play-services-maps:8.1.0'
compile 'com.google.android.gms:play-services-plus:8.1.0'
addUnimodulesDependencies()
}
反应原生信息
React Native Environment Info:
System:
OS: macOS 10.15.1
CPU: (4) x64 Intel(R) Core(TM) i5-8210Y CPU @ 1.60GHz
Memory: 86.16 MB / 8.00 GB
Shell: 3.2.57 - /bin/bash
Binaries:
Node: 12.6.0 - /usr/local/bin/node
Yarn: 1.17.3 - /usr/local/bin/yarn
npm: 6.10.2 - /usr/local/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
iOS SDK:
Platforms: iOS 13.2, DriverKit 19.0, macOS 10.15, tvOS 13.2, watchOS 6.1
IDEs:
Android Studio: 3.5 AI-191.8026.42.35.5791312
Xcode: 11.2.1/11B53 - /usr/bin/xcodebuild
npmPackages:
react: 16.8.3 => 16.8.3
react-native: 0.59.10 => 0.59.10
npmGlobalPackages:
react-native-cli: 2.0.1
react-native-create-library: 3.1.2
react-native-git-upgrade: 0.2.7
解决方案
由于您使用 expo bare-minimum 创建了项目,因此您的 react-native 版本是 0.59.10。现在这会给 RNFirebase 带来这种困难。我知道这一点,因为几天前我在同一个坑洼里。我的建议如下,现在将为您创造奇迹。
- 备份您当前的项目并使用至少 v60 的最新版本创建一个新的 React-Native(完全没有 Expo)应用程序。
- 现在您需要单独添加react-native-unimodules,这有点像 a**. 因为您需要在
MainApplictaion.java
文件中添加一些准确的行。但请确保它可以完成。我已经做了。阅读它的文档,以便将其成功添加到您的项目中。 在您的 android 文件夹 > 在 settings.gradle 中,请务必
apply from: '../node_modules/react-native-unimodules/gradle.groovy' includeUnimodulesProjects()
在该行之后添加rootProject.name =""
在你的 android > build.gradle 确保你
classpath("com.android.tools.build:gradle:3.4.1") classpath('com.google.gms:google-services:4.2.0')
有dependencies{}
确保您
apply from: '../../node_modules/react-native-unimodules/gradle.groovy' addUnimodulesDependencies()
在之后添加implementation "com.facebook.react:react-native:+"
现在仔细添加模块和依赖项,就像您之前的项目一样。请记住,当您刚刚升级项目的基础时,一些依赖项现在可能会显示错误。
我知道这是很多工作,但需要完成才能使其正常工作。很多 RN 开发人员都在 expo - unimodules - RNFirebase 之间遇到这个版本的坑。
推荐阅读
- flutter - Flutter - 如何在 Slider 小部件的轨道内添加小部件
- react-native - npx react-native run-android --variant=release 失败但使用 ./gradlew bundleRelease 成功?
- java - 无法通过 java 访问 Maven 配置文件属性
- java - Proto 运行时和编译器之间的区别
- gitlab - 为什么我在 Gitlab 合并请求中收到“由于未验证用户而导致管道失败”和“分离的合并请求管道”?
- haskell - 我正在尝试在haskell中使用警卫进行分类
- python - 如何修复 Kmeans 聚类中的关键错误
- java - snapshot.getChildren() 没有将值传递给 FOR LOOP onDataChange 中的 snap 变量
- python - 使用 tf.py_function() 运行 tf.distribute.Server 的示例
- python - 如何从python中的keccak 256哈希值中找到原始值?