gms:play-services-vision 和 firebase 之间的版本冲突

Posted

技术标签:

【中文标题】gms:play-services-vision 和 firebase 之间的版本冲突【英文标题】:Version conflict between gms:play-services-vision and firebase 【发布时间】:2019-05-26 02:45:48 【问题描述】:

我已经安装了 react-native-firebase 和 react-native-camera。当 play-services -vision 卡在 12.0.1 时,相机很好,但我只是遇到了这个错误(错误更新属性 googleVisionBarcodeDetectorEnable)https://github.com/react-native-community/react-native-camera/issues/1844,需要升级到 15.0.2

play-services-vision12.0.1 提升到15.0.2 时,Google Play 服务和 Firebase 似乎存在冲突:

Dependency failing: com.google.android.gms:play-services-flags:15.0.1 -> com.google.android.gms:play-services-basement@[
  15.0.1], but play-services-basement version was 16.0.1.

  The following dependencies are project dependencies that are direct or have transitive dependencies that lead to the art
  ifact with the issue.
  -- Project 'app' depends onto com.google.firebase:firebase-messaging@17.3.4
  -- Project 'app' depends onto com.google.android.gms:play-services-base@16.0.1
  -- Project 'app' depends onto com.google.firebase:firebase-core@16.0.6
  -- Project 'app' depends onto com.google.android.gms:play-services-vision@15.0.2

我试过com.google.android.gms:play-services-vision@16.2.0,但它给了我exceed 64k methods 错误。 升级到 17.0.2 会导致来自 com.google.android.gms:play-services-basement 的版本冲突。

有人同时使用 react-native-firebase 和 react-native 相机吗?你能告诉我如何解决这个版本冲突问题吗?

这里是android/app/build.gradle中的依赖项

dependencies 

    implementation (project(':react-native-camera')) 
      exclude group: "com.google.android.gms"
      implementation "com.android.support:exifinterface:$rootProject.ext.supportLibVersion"
      implementation ('com.google.android.gms:play-services-vision:12.0.1') 
        force = true
      
    
    implementation project(':react-native-gesture-handler')
    implementation project(':react-native-webview')
    implementation project(':react-native-fast-image')
    implementation project(':react-native-google-signin')
    implementation project(':react-native-firebase')
    implementation 'com.google.firebase:firebase-core:16.0.6'
    implementation ('com.google.android.gms:play-services-base:16.0.1')
    implementation 'com.google.firebase:firebase-messaging:17.3.4'
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.5@aar') 
        transitive = true
    
    implementation(project(':react-native-google-signin')) 
        exclude group: "com.google.android.gms" // very important
    
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "com.android.support:appcompat-v7:$rootProject.ext.supportLibVersion"
    implementation 'com.facebook.react:react-native:+'
    implementation project(':react-native-sqlite-storage')
    implementation 'me.leolin:ShortcutBadger:1.1.21@aar'
    implementation 'com.facebook.fresco:animated-gif:1.10.0'

在 android/build.gradle 中的分机

ext 
    buildToolsVersion = "28.0.3"
    minSdkVersion = 19
    compileSdkVersion = 28
    targetSdkVersion = 28
    supportLibVersion = "27.1.1"

包装:

"react-native-camera": "^1.6.4",
"react-native-firebase": "^5.1.1",

【问题讨论】:

在 app build.gradle com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true 上试试这个 exceed 64k methods你可以启用multidex来消除错误 【参考方案1】:

您需要更新 gms:play-services-vision 的版本。 implementation 'com.google.android.gms:play-services-vision:17.0.2'

【讨论】:

供参考:developers.google.com/android/guides/releases#november_13_2018【参考方案2】:

对于从 Expo (v34) 退出到想要使用 firebase 的 react-native 项目后的任何人,如果您继续使用 expo-barcode-scanner,问题就出在它身上,因为它使用的是旧版本的 play-services-vision

您有多种选择:

如果发布了新的 Expo SDK,请使用它。我肯定会升级视觉库。 删除 expo-barcode-scanner 作为依赖项并使用另一个。 将视觉库的版本泵入expo-barcode-scanner lib 中的node_modules\expo-barcode-scanner\android\build.gradle(不鼓励)

【讨论】:

谢谢,这是我的问题。我们使用 gradle 约束以另一种方式解决:docs.gradle.org/current/userguide/…【参考方案3】:

您需要启用 MultiDex,因为:

单个 DEX 中可以引用的方法总数 文件到 65,536

通过启用 multidex ,编译器会将额外的方法/函数放在另一个 dex 文件中。

请执行以下步骤:

1- 将 MultiDex 添加到 build.gradle(模块文件):

implementation 'com.android.support:multidex:1.0.3'

2 -Clen 并构建项目

3- 在同一个 buil.gradle(Module) 中添加 multiDexEnabled =true

      android   
       .... 
         defaultConfig 
      ...
      multiDexEnabled true
     ...
       
      

启用 MultiDex

4- 将应用程序类添加到您的项目并覆盖从 MultiDexApplication 而不是应用程序扩展它的应用程序类,例如:

 java:   public class MyMultiDexApplication extends MultiDexApplication  ... 
Kotlin :  class MyMultiDexApplication : MultiDexApplication()  override fun onCreate() 
    super.onCreate()  

5- 将您的应用程序类名称添加到应用程序标记中的 AndroidManifest.xml:

<application
        android:name=".MyMultiDexApplication "
        android:icon="@mipmap/ic_logo"
        android:label="@string/app_name"
        >

6-添加您需要的依赖项,例如:

com.google.android.gms:play-services-vision@16.2.0

构建.gradle

7 - 再次构建并完成

谷歌参考了解更多信息: enter link description here

【讨论】:

【参考方案4】:

我在导入模块时避免这种情况发生的简单方法是

1) npm 安装 2) 运行-android/运行-ios 3)我收到相同的消息或有时没有消息 4)我去 node_modules/react-native-component-name 并找到 android/build.gradle 文件,我将 compileSdkVersion 和 buildToolsVersion 更改为我的版本(最新),并用加号替换所有依赖项

com.google.android.gms:play-services-vision:17.0.2 =&gt; com.google.android.gms:play-services-vision:+ 这样,模块始终使用可用的最新库

【讨论】:

以上是关于gms:play-services-vision 和 firebase 之间的版本冲突的主要内容,如果未能解决你的问题,请参考以下文章

无法在颤振中同步 build.gradle 中的依赖项