当前位置: 首页 > 知识库问答 >
问题:

即时应用的Firebase支持库依赖冲突

王英奕
2023-03-14

我正在尝试将即时应用程序实现到使用Firebase数据库的项目中。我的目标是SDK版本27,因此支持库在版本27.0.2上。

Firebase数据库版本为11.8.0,gms版本为3.1.0。当我尝试同步时,会出现以下错误:

Android dependency 'com.android.support:support-v4' has different 
version for the compile (25.2.0) and runtime (27.0.2) classpath. You 
should manually set the same version via DependencyResolution

通过在即时应用之前明确添加以下依赖项,我能够绕过这个问题

implementation 'com.android.support:support-v4:27.0.2'
implementation 'com.android.support:support-media-compat:27.0.2'

但是对于即时应用程序,即使我在功能模块(app-base)中拥有它们,当我尝试构建实际应用程序(com.android.application)时,我也会遇到同样的错误。

我可以通过将这些冲突的依赖项移动到application module gradle文件中来再次解决这个问题,在这种情况下,同步成功,但接下来我面临另一个问题,这次是清单合并,这会阻止应用程序找到启动器活动:

属性提供程序#com.google.火力基地。供应商。FirebaseInitProvider@authorities值=(com.iamkan.packagename.firebaseinitprovider)来自AndroidManifest。xml:10:13-72也出现在AndroidManifest上。xml:33:350-423 value=(com.iamkan.packagename.base.firebaseinitprovider)。建议:在AndroidManifest的元素中添加“tools:replace=”android:authorities“。xml:8:9-12:39来覆盖。应用程序主清单(此文件),第9行

最后一个问题与fire base-core依赖项有关,因为当我将应用程序gradle依赖项从

implementation project(':app-base')

implementation (project(':app-base')) {
    exclude group: 'com.google.firebase', module:'firebase-core'
}

我可以运行这个应用程序。但这一次,我在运行时开始出现以下错误(第一次调用FirebaseDatabase.getInstance()

Default FirebaseApp is not initialized in this process com.iamkaan.packagename. Make sure to call FirebaseApp.initializeApp(Context) first

它确实没有被调用,但在即时应用程序实现之前,它一直在运行。不管怎样,在第一次调用FirebaseDatabase之前,我在不同的地方添加了这个调用,但没有任何帮助。

包名

  • 应用程序清单:com。安卡恩。packagename
  • app gradle applicationId:com。安卡恩。packagename
  • 应用程序基础清单:com。安卡恩。给我打包。基本
  • app base gradle文件没有applicationId

共有2个答案

郝君博
2023-03-14

试试这个。他28岁

implementation ('com.google.firebase:firebase-core:16.0.6'){
    exclude module: 'support-media-compat'
    exclude module: 'support-v4'
}
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:support-media-compat:28.0.0'
鞠源
2023-03-14

我遇到了类似的情况,这是由依赖项包含的支持库引起的。需要注意的是,几乎所有Google/Android支持库(CardView、RecyclView等)都包含最新的v4和v7支持库。所以这通常会导致冲突。

你需要做的是:

  1. 在主应用程序中添加Base模块时不要排除任何内容,即继续使用实现项目(': app-base')
  2. 使用api代替实现来支持基本模块的build.gradle中包含的库,即api'com.android.support: support port-v4:27.0.2'
  3. 确保您在Base Module中添加的库不能再次添加到主端的build.gradle文件中
  4. 最重要的:对于主端和基本模块的build.gradle文件,排除每个项目的支持库(参见下面的示例
api('com.android.support:support-media-compat:27.0.2') {
    exclude group: 'com.android.support'
}
api('com.android.support:support-v7:27.0.2') {
    exclude group: 'com.android.support'
}

我还建议不要使用com.Android支持:support-v7:27.0.2只使用支持库中您需要的特定项。有关如何仅从支持库添加特定项的信息,请参阅支持库软件包。

 类似资料:
  • 我正试图用下面的“为Android设置Firebase实时数据库”的例子写入我的数据库,但应用程序在启动时崩溃。 似乎是因为依赖: 我的应用程序Build.Gradle: 如何解决此问题?

  • 12.3 依赖注入 JSR-352主要基于Spring Batch的编程模型。因此,尽管没有明确需要正式的依赖注入实现, 但还是推荐使用 DI 的方式。Spring Batch支持 JSR-352 中定义的三种加载组件方式: 实现专用加载器 - Spring Batch 构建于 Spring 之上, 支持在 JSR-352 批处理作业中使用依赖注入. 归档文件加载器 - JSR-352 定义了一个

  • 由一些模块组成的maven项目。我的一个模块正在使用google版本的guava依赖项。现在,我正在我的项目中集成另一个模块,该模块也使用guava但版本。 因此,我希望新模块使用guava版本,而其余项目使用guava版本。我尝试将guava的添加到新模块中,但没有成功。 更新:@Guillaume Darmont的答案为不同的模块解决了问题。但现在我的问题是,新模块有两个依赖项,其中一个使用g

  • 错误为:java.security.NoSuchProviderException:JCE无法验证提供程序BC。注意,我已经添加了这段代码:security.addProvider(new BouncyCastleProvider()); 这在使用spring boot embedded tomcat时可以很好地工作,但在导出到运行在wildfly服务器上的war文件时就不行了。 下面是我如何宣布

  • 我是新的Android应用程序开发。当我试图创建一个新的项目,Android项目......下面的消息弹出。. 错误:任务执行失败:应用程序:preDebugAndroidTestBuild。 与项目中的依赖com.android.support:支持注释冲突:应用。应用(26.1.0)和测试应用(27.1.1)的解析版本不同。详见https://d.android.com/r/tools/tes

  • 因为Flatter\u math\u fork 获取:^4.6.1获取存储:2.0.3 dio:^4.0.4 dio\u http\u缓存:0.3.0 webview_flutter:^2.8.0flutter_html:^2.0.0url_launcher:^6.0.17 firebase\u消息:^11.2.4 cloud\u firestore:^3.1.5 firebase\u认证:^3.