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

时间:2018-01-17 02:55:04

标签: android firebase firebase-realtime-database android-gradle android-instant-apps

我正在尝试将即时应用程序实施到使用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)时,我再次得到相同的错误。

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

  AndroidManifest.xml中的

属性provider #com.google.firebase.provider.FirebaseInitProvider@authorities value =(com.iamkaan.packagename.firebaseinitprovider):AndroidManifest.xml中还有10:13-72:33:350- 423 value =(com.iamkaan.packagename.base.firebaseinitprovider)。建议:在AndroidManifest.xml:8:9-12:39中添加'tools:replace =“android:authorities”'来覆盖。 app main manifest(这个文件),第9行

最后一个问题在某种程度上与firebase-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调用之前将调用添加到了各个地方,没有任何帮助。

套餐名称

  • app manifest:com.iamkaan.packagename
  • app gradle applicationId:com.iamkaan.packagename
  • app-base manifest:com.iamkaan.packagename.base
  • app-base gradle文件没有applicationId

2 个答案:

答案 0 :(得分:2)

我碰到了类似的东西,它是由依赖项包含的支持库引起的。值得注意的是,几乎所有Google / Android支持库(CardView,RecyclerView等)都包含最新的v4和v7支持库。所以这通常会导致冲突。

您需要做的是:

  1. 在主应用程序中添加基本模块时不要排除任何内容,即仅使用implementation project(':app-base')
  2. 使用api代替implementation,用于基本模块build.gradle中包含的支持库,即api 'com.android.support:support-v4:27.0.2'
  3. 确保您在基本模块中添加的库不得再次添加到主应用的build.gradle文件中
  4. 最重要的是:对于主应用程序和基本模块的build.gradle文件,请排除FOR EACH项目的支持库(参见下面的示例)
  5. 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:support-v7:27.0.2而只使用您需要的支持库中的特定项。请参阅Support Library Packages,了解如何仅添加支持库中的特定项目。

答案 1 :(得分:0)

尝试一下。 SDK为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'