我遇到了Firebase集成的问题。首先,我已将规则添加到根级build.gradle
文件中:
buildscript {
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.google.gms:google-services:3.0.0'
}
}
allprojects {
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
模块Gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24"
defaultConfig {
applicationId "com.example.app"
minSdkVersion 14
targetSdkVersion 24
versionCode 2
versionName "0.9"
}
buildTypes {
///
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.google.firebase:firebase-core:9.0.2'
compile 'com.google.firebase:firebase-crash:9.0.2'
}
apply plugin: 'com.google.gms.google-services'
在构建项目期间,我收到错误:
错误:将字节码转换为dex时出错:原因: com.android.dex.DexException:多个dex文件定义 LCOM /谷歌/火力/ FirebaseException;
错误原因很明显,但我没有编译任何库两次。我应该手动从构建过程中排除FirebaseException
类吗?如果是这样,怎么样?也许这是Firebase依赖项中的一个错误?
感谢。
答案 0 :(得分:13)
我在react-native-google-signin
模块中遇到此问题。由于指令如何修改build.gradle
通常不是最新的,不完整的或仅在多个不相关的项目中定义,项目仅在复制react-native-google-signin
示例项目中的设置后编译。事实证明,语句的顺序和exclude group
命令一样重要。最终结果如下所示(app/build.gradle
):
dependencies {
...
compile 'com.google.android.gms:play-services-auth:9.2.1'
compile(project(":react-native-google-signin")) {
exclude group: "com.google.android.gms"
}
}
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
apply plugin: 'com.google.gms.google-services'
顶部build.gradle
像往常一样包含额外的gms
类路径:
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath 'com.google.gms:google-services:3.0.0'
}
}
完成这些更改后,没有任何Multiple dex
错误。
答案 1 :(得分:4)
FireBase是一个庞大的库,因此您需要在应用程序中启用multidex支持。
dependencies {
compile ('com.google.firebase:firebase-core:9.0.2') {
exclude module: 'play-services-base'
exclude module: 'support-v4'
exclude module: 'support-annotations'
}
compile 'com.android.support:multidex:1.0.1'
}
defaultConfig {
// Enabling multidex support.
multiDexEnabled true
}
答案 2 :(得分:3)
您似乎已达到methods count limit。尝试删除firebase
个依赖关系并检查您的应用的方法计数(例如,使用this gradle plugin(如果您不删除这些依赖关系,您将无法在以下位置构建项目)所以,所以,使用方法count plugin)。
Firebase is a HUGE library - 17k +方法。这取决于吨的东西。您可以做的一件事是通过单击" methodscount.com"上的此按钮来检查依赖项列表:
如果您的项目中已经有其中一些,可以尝试排除它们:
compile ('com.google.firebase:firebase-core:9.0.2') {
exclude module: 'play-services-base'
exclude module: 'support-v4'
exclude module: 'support-annotations'
}
如果这没有帮助,那么您可能希望为项目configure multidex。
答案 3 :(得分:1)
如果它对任何人有帮助,我遇到了类似的问题,这是由Google服务的Gradle插件引起的依赖项与Firebase冲突造成的。
在我的顶级build.gradle中,我在buildscript中:
classpath 'com.google.gms:google-services:3.0.0'
在我的app的build.gradle中引入(自动)与之相冲突的依赖项:
compile 'com.firebaseui:firebase-ui-auth:2.2.0'
有点令人困惑,因为我只有一个编译依赖,并且正在摸不着可能会发生冲突。
我删除了google-services gradle插件,它解决了这个问题。我想我也可以找到合适的版本:)
答案 4 :(得分:1)
我正在使用 react-native-maps 和 react-native-google-signin。
而且,我有多个dex文件定义Lcom / google / firebase / FirebaseException
我的解决方案。
打开build.gradle(react-native-maps)
dependencies {
provided "com.facebook.react:react-native:+"
compile "com.google.android.gms:play-services-base:10.2.4"
compile "com.google.android.gms:play-services-maps:10.2.4"
}
版本是10.2.4
继续打开build.gradle(react-native-google-signin)
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile "com.android.support:appcompat-v7:23.0.1"
compile 'com.google.android.gms:play-services-auth:9.2.1' <- change here
compile "com.facebook.react:react-native:+"
}
它使用版本9.2.1,这就是原因。
将其更改为版本10.2.4
compile 'com.google.android.gms:play-services-auth:10.2.4'
接下来,打开build.gradle(app)并添加一个新的
compile 'com.google.android.gms:play-services-auth:10.2.4'
现在你有了。
compile 'com.google.android.gms:play-services-auth:10.2.4'
compile(project(":react-native-google-signin")){
exclude group: "com.google.android.gms"
}
运行命令cd android & gradlew clean & cd ..
util no error然后运行react-native run-android
。
希望可以提供帮助。
答案 5 :(得分:0)
当我使用firebase-ui:2.0.0时遇到此错误。我设法通过降级到'com.firebaseui:firebase-ui:1.2.0'
并在项目级别build.gradle中添加以下行来解决它:
allprojects {
repositories {
jcenter()
// Add the following
maven {
url 'https://maven.fabric.io/public'
}
}
}
答案 6 :(得分:0)
感谢this post,只需检查并将您的Google依赖关系版本升级到上一版本。
我可以解决我的问题。问题是BaseGameUtils仍然存在 使用/引用较旧版本的播放服务。添加正确 版本,它现在有效。猜猜我会为我的下一个省略BaseGameUtils 项目
答案 7 :(得分:0)
这是因为您的某些库使用其他库的不同版本。
查看您上次添加的库并排除。 对于我的项目来说,反应是本机 - 篝火&#39;。
compile(project(':react-native-firestack')){
exclude group: "com.google.android.gms" // very important
}
答案 8 :(得分:-2)
请在build.gradle
中的android中添加此代码dexOptions {
preDexLibraries = false
}