我在react-native中使用react-native-device-info库。我已经使用了大约一年了,没有问题,但是自从最近两周以来,Android上的应用程序由于该库而崩溃。
我收到如下错误:
他们讨论了此问题here。他们的解释如下:
无法合并dex /多个dex文件/存在问题
context_object_name
react-native-device-info的使用 com.google.android.gms:play-services-gcm提供 [getInstance()] [#getinstance]。这可能导致冲突 构建Android应用程序。如果您使用的是其他版本的 com.google.android.gms:play-services-gcm在您的应用中,您可以定义 build.gradle中的googlePlayServicesVersion gradle变量 文件来告诉react-native-device-info它应该要求哪个版本。
如果您使用的其他库与 com.google.android.gms:play-services-gcm,您可以直接忽略它 gradle文件中的依赖项:
com.google.android.gms
我尝试将代码添加到compile(project(':react-native-device-info')) {
exclude group: 'com.google.android.gms'
}
,但没有发生任何问题,sam问题。
我不确定如何解决。有想法吗?
答案 0 :(得分:3)
将您的app/build.gradle
依赖项更改如下:
dependencies {
...
compile project(':react-native-device-info')
compile('com.google.android.gms:play-services-gcm:11.8.0') {
force = true
}
}
如果11.8.0
不起作用,请尝试将其替换为+
。 react-native-device-info
将+
用于com.google.android.gms:play-services-gcm
依赖项。
更新
如果这不起作用,请按照错误消息中的建议进行操作->尝试将def googlePlayServicesVersion = "11.8.0"
添加到app/build.gradle
中以强制在react-native-device-info
上使用该版本。 (您可以根据需要更改版本)
然后将您的依赖项更改如下:
dependencies {
...
compile "com.google.android.gms:play-services-gcm:$googlePlayServicesVersion"
}
如果您查看他们的build.gradle
文件,他们将按照以下方式处理其依赖项:
...
def DEFAULT_GOOGLE_PLAY_SERVICES_VERSION = "+"
...
dependencies {
def googlePlayServicesVersion = project.hasProperty('googlePlayServicesVersion') ? project.googlePlayServicesVersion : DEFAULT_GOOGLE_PLAY_SERVICES_VERSION
compile 'com.facebook.react:react-native:+'
compile "com.google.android.gms:play-services-gcm:$googlePlayServicesVersion"
}
更新
(这是可行的解决方案)
如果这不起作用,请尝试将项目级别的build.gradle
文件更改为以下格式(存储库顺序很重要):
buildscript {
repositories {
maven {
url 'https://maven.google.com/'
name 'Google'
}
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
maven {
url 'https://maven.google.com/'
name 'Google'
}
mavenLocal()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
}
}
存储库的顺序很重要,因为例如,如果首先使用jcenter()
,并且它将在其中找到com.google.android.gms
程序包,它将检索那些源,并且它们可能是错误的那些。在您的情况下,maven {Google...}
元素指向您需要的源,这就是为什么在使用jcenter()
之前必须调用它的原因。