[英]Errors adding dependency with react-native
I'm creating an application using react-native. 我正在使用react-native创建一个应用程序。 So far I have implemented a few modules like react-native-camera
and react-native-maps
. 到目前为止,我已经实现了一些模块,例如react-native-camera
和react-native-maps
。
Everything was working fine until I tried to implement react-native-push-notification
. 一切工作正常,直到我尝试实现react-native-push-notification
为止。
I followed their implementation using this tutorial , but now, even though the app builds succesfully, it crashes on start up. 我使用本教程跟踪了它们的实现,但是现在,即使该应用程序成功构建,它在启动时也会崩溃。
This is my logcat (It's actually cropped 'cause it wouldn't fit here) 这是我的日志(实际上被裁剪了,因为它不适合这里)
11-19 18:29:15.419 29371 29456 I art : Rejecting re-init on previously-failed class java.lang.Class<com.google.android.gms.maps.model.Cap>: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/internal/safeparcel/zza;
11-19 18:29:15.419 29371 29456 I art : at java.util.List com.airbnb.android.react.maps.MapsPackage.createViewManagers(com.facebook.react.bridge.ReactApplicationContext) (MapsPackage.java:36)
11-19 18:29:15.419 29371 29456 I art : at java.util.List com.facebook.react.ReactInstanceManager.getOrCreateViewManagers(com.facebook.react.bridge.ReactApplicationContext) (ReactInstanceManager.java:753)
11-19 18:29:15.419 29371 29456 I art : at com.facebook.react.uimanager.UIManagerModule com.facebook.react.CoreModulesPackage.createUIManager(com.facebook.react.bridge.ReactApplicationContext) (CoreModulesPackage.java:168)
11-19 18:29:15.419 29371 29456 I art : at com.facebook.react.uimanager.UIManagerModule com.facebook.react.CoreModulesPackage.access$200(com.facebook.react.CoreModulesPackage, com.facebook.react.bridge.ReactApplicationContext) (CoreModulesPackage.java:52)
11-19 18:29:15.419 29371 29456 I art : at com.facebook.react.bridge.NativeModule com.facebook.react.CoreModulesPackage$7.get() (CoreModulesPackage.java:126)
11-19 18:29:15.419 29371 29456 I art : at java.lang.Object com.facebook.react.CoreModulesPackage$7.get() (CoreModulesPackage.java:123)
11-19 18:29:15.419 29371 29456 I art : at void com.facebook.react.NativeModuleRegistryBuilder.processPackage(com.facebook.react.ReactPackage) (NativeModuleRegistryBuilder.java:61)
11-19 18:29:15.419 29371 29456 I art : at void com.facebook.react.ReactInstanceManager.processPackage(com.facebook.react.ReactPackage, com.facebook.react.NativeModuleRegistryBuilder) (ReactInstanceManager.java:1171)
11-19 18:29:15.419 29371 29456 I art : at com.facebook.react.bridge.NativeModuleRegistry com.facebook.react.ReactInstanceManager.processPackages(com.facebook.react.bridge.ReactApplicationContext, java.util.List, boolean) (ReactInstanceManager.java:1141)
11-19 18:29:15.419 29371 29456 I art : at com.facebook.react.bridge.ReactApplicationContext com.facebook.react.ReactInstanceManager.createReactContext(com.facebook.react.bridge.JavaScriptExecutor, com.facebook.react.bridge.JSBundleLoader) (ReactInstanceManager.java:1083)
11-19 18:29:15.419 29371 29456 I art : at com.facebook.react.bridge.ReactApplicationContext com.facebook.react.ReactInstanceManager.access$900(com.facebook.react.ReactInstanceManager, com.facebook.react.bridge.JavaScriptExecutor, com.facebook.react.bridge.JSBundleLoader) (ReactInstanceManager.java:116)
11-19 18:29:15.419 29371 29456 I art : at void com.facebook.react.ReactInstanceManager$5.run() (ReactInstanceManager.java:913)
11-19 18:29:15.419 29371 29456 I art : at void java.lang.Thread.run() (Thread.java:762)
11-19 18:29:15.419 29371 29456 I art : Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.internal.safeparcel.zza" on path: DexPathList[[zip file "/data/app/com.dpassapp-2/base.apk"],nativeLibraryDirectories=[/data/app/com.dpassapp-2/lib/arm, /data/app/com.dpassapp-2/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
11-19 18:29:15.419 29371 29456 I art : at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
11-19 18:29:15.419 29371 29456 I art : at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
11-19 18:29:15.419 29371 29456 I art : at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
11-19 18:29:15.419 29371 29456 I art : at java.util.List com.airbnb.android.react.maps.MapsPackage.createViewManagers(com.facebook.react.bridge.ReactApplicationContext) (MapsPackage.java:36)
11-19 18:29:15.419 29371 29456 I art : at java.util.List com.facebook.react.ReactInstanceManager.getOrCreateViewManagers(com.facebook.react.bridge.ReactApplicationContext) (ReactInstanceManager.java:753)
11-19 18:29:15.419 29371 29456 I art : at com.facebook.react.uimanager.UIManagerModule com.facebook.react.CoreModulesPackage.createUIManager(com.facebook.react.bridge.ReactApplicationContext) (CoreModulesPackage.java:168)
11-19 18:29:15.419 29371 29456 I art : at com.facebook.react.uimanager.UIManagerModule com.facebook.react.CoreModulesPackage.access$200(com.facebook.react.CoreModulesPackage, com.facebook.react.bridge.ReactApplicationContext) (CoreModulesPackage.java:52)
11-19 18:29:15.419 29371 29456 I art : at com.facebook.react.bridge.NativeModule com.facebook.react.CoreModulesPackage$7.get() (CoreModulesPackage.java:126)
11-19 18:29:15.419 29371 29456 I art : at java.lang.Object com.facebook.react.CoreModulesPackage$7.get() (CoreModulesPackage.java:123)
11-19 18:29:15.419 29371 29456 I art : at void com.facebook.react.NativeModuleRegistryBuilder.processPackage(com.facebook.react.ReactPackage) (NativeModuleRegistryBuilder.java:61)
11-19 18:29:15.419 29371 29456 I art : at void com.facebook.react.ReactInstanceManager.processPackage(com.facebook.react.ReactPackage, com.facebook.react.NativeModuleRegistryBuilder) (ReactInstanceManager.java:1171)
11-19 18:29:15.419 29371 29456 I art : at com.facebook.react.bridge.NativeModuleRegistry com.facebook.react.ReactInstanceManager.processPackages(com.facebook.react.bridge.ReactApplicationContext, java.util.List, boolean) (ReactInstanceManager.java:1141)
11-19 18:29:15.419 29371 29456 I art : at com.facebook.react.bridge.ReactApplicationContext com.facebook.react.ReactInstanceManager.createReactContext(com.facebook.react.bridge.JavaScriptExecutor, com.facebook.react.bridge.JSBundleLoader) (ReactInstanceManager.java:1083)
11-19 18:29:15.419 29371 29456 I art : at com.facebook.react.bridge.ReactApplicationContext com.facebook.react.ReactInstanceManager.access$900(com.facebook.react.ReactInstanceManager, com.facebook.react.bridge.JavaScriptExecutor, com.facebook.react.bridge.JSBundleLoader) (ReactInstanceManager.java:116)
11-19 18:29:15.419 29371 29456 I art : at void com.facebook.react.ReactInstanceManager$5.run() (ReactInstanceManager.java:913)
11-19 18:29:15.419 29371 29456 I art : at void java.lang.Thread.run() (Thread.java:762)
Searching online I found that this could be a dependency version conflict. 在线搜索我发现这可能是依赖版本冲突。 So I checked my dependency tree and noticed that there was another module I was using that also uses com.google.android.gms:play-services-gcm
, but in a different version. 因此,我检查了依赖关系树,发现还有一个我正在使用的模块,它也使用com.google.android.gms:play-services-gcm
,但是版本不同。 So I changed the version in my application level build.gradle to match the other version, but still I get the same error. 所以我在应用程序级别build.gradle中更改了版本以匹配其他版本,但是仍然出现相同的错误。
This is the dependecy tree from my project: 这是我项目中的依赖树:
releaseRuntimeClasspath - Resolved configuration for runtime for variant: release
+--- com.android.support:appcompat-v7:26.1.0 -> 27.1.1
| +--- com.android.support:support-annotations:27.1.1
| +--- com.android.support:support-core-utils:27.1.1
| | +--- com.android.support:support-annotations:27.1.1
| | \--- com.android.support:support-compat:27.1.1
| | +--- com.android.support:support-annotations:27.1.1
| | \--- android.arch.lifecycle:runtime:1.1.0
| | +--- android.arch.lifecycle:common:1.1.0
| | \--- android.arch.core:common:1.1.0
| +--- com.android.support:support-fragment:27.1.1
| | +--- com.android.support:support-compat:27.1.1 (*)
| | +--- com.android.support:support-core-ui:27.1.1
| | | +--- com.android.support:support-annotations:27.1.1
| | | +--- com.android.support:support-compat:27.1.1 (*)
| | | \--- com.android.support:support-core-utils:27.1.1 (*)
| | +--- com.android.support:support-core-utils:27.1.1 (*)
| | +--- com.android.support:support-annotations:27.1.1
| | +--- android.arch.lifecycle:livedata-core:1.1.0
| | | +--- android.arch.lifecycle:common:1.1.0
| | | +--- android.arch.core:common:1.1.0
| | | \--- android.arch.core:runtime:1.1.0
| | | \--- android.arch.core:common:1.1.0
| | \--- android.arch.lifecycle:viewmodel:1.1.0
| +--- com.android.support:support-vector-drawable:27.1.1
| | +--- com.android.support:support-annotations:27.1.1
| | \--- com.android.support:support-compat:27.1.1 (*)
| \--- com.android.support:animated-vector-drawable:27.1.1
| +--- com.android.support:support-vector-drawable:27.1.1 (*)
| \--- com.android.support:support-core-ui:27.1.1 (*)
+--- com.facebook.react:react-native:+ -> 0.57.4
| +--- com.facebook.infer.annotation:infer-annotation:0.11.2
| | \--- com.google.code.findbugs:jsr305:3.0.1 -> 3.0.2
| +--- javax.inject:javax.inject:1
| +--- com.android.support:appcompat-v7:27.1.1 (*)
| +--- com.facebook.fresco:fresco:1.10.0
| | +--- com.facebook.fresco:fbcore:1.10.0
| | +--- com.facebook.fresco:drawee:1.10.0
| | | +--- com.facebook.fresco:fbcore:1.10.0
| | | \--- com.facebook.fresco:imagepipeline:1.10.0
| | | +--- com.facebook.fresco:imagepipeline-base:1.10.0
| | | | +--- com.facebook.soloader:soloader:0.5.0 -> 0.5.1
| | | | +--- com.parse.bolts:bolts-tasks:1.4.0
| | | | \--- com.facebook.fresco:fbcore:1.10.0
| | | +--- com.facebook.soloader:soloader:0.5.0 -> 0.5.1
| | | +--- com.parse.bolts:bolts-tasks:1.4.0
| | | \--- com.facebook.fresco:fbcore:1.10.0
| | +--- com.facebook.fresco:imagepipeline:1.10.0 (*)
| | \--- com.facebook.soloader:soloader:0.5.0 -> 0.5.1
| +--- com.facebook.fresco:imagepipeline-okhttp3:1.10.0
| | +--- com.squareup.okhttp3:okhttp:3.10.0 -> 3.11.0
| | | \--- com.squareup.okio:okio:1.14.0
| | +--- com.facebook.fresco:fbcore:1.10.0
| | \--- com.facebook.fresco:imagepipeline:1.10.0 (*)
| +--- com.facebook.soloader:soloader:0.5.1
| +--- com.google.code.findbugs:jsr305:3.0.2
| +--- com.squareup.okhttp3:okhttp:3.11.0 (*)
| +--- com.squareup.okhttp3:okhttp-urlconnection:3.11.0
| | \--- com.squareup.okhttp3:okhttp:3.11.0 (*)
| +--- com.squareup.okio:okio:1.14.0
| \--- org.webkit:android-jsc:r174650
+--- project :react-native-ble-manager
| \--- com.facebook.react:react-native:[0.30.0,) -> 0.57.4 (*)
+--- project :react-native-camera
| +--- com.google.zxing:core:3.3.0
| +--- com.drewnoakes:metadata-extractor:2.9.1
| | \--- com.adobe.xmp:xmpcore:5.1.2
| +--- com.google.android.gms:play-services-vision:11.0.4
| | +--- com.google.android.gms:play-services-base:[11.0.4] -> 16.0.1
| | | +--- com.google.android.gms:play-services-basement:16.0.1
| | | | \--- com.android.support:support-v4:26.1.0
| | | | +--- com.android.support:support-compat:26.1.0 -> 27.1.1 (*)
| | | | +--- com.android.support:support-media-compat:26.1.0
| | | | | +--- com.android.support:support-annotations:26.1.0 -> 27.1.1
| | | | | \--- com.android.support:support-compat:26.1.0 -> 27.1.1 (*)
| | | | +--- com.android.support:support-core-utils:26.1.0 -> 27.1.1 (*)
| | | | +--- com.android.support:support-core-ui:26.1.0 -> 27.1.1 (*)
| | | | \--- com.android.support:support-fragment:26.1.0 -> 27.1.1 (*)
| | | \--- com.google.android.gms:play-services-tasks:16.0.1
| | | \--- com.google.android.gms:play-services-basement:16.0.1 (*)
| | +--- com.google.android.gms:play-services-basement:[11.0.4] -> 16.0.1 (*)
| | \--- com.google.android.gms:play-services-vision-common:[11.0.4] -> 11.0.4
| | +--- com.google.android.gms:play-services-base:[11.0.4] -> 16.0.1 (*)
| | \--- com.google.android.gms:play-services-basement:[11.0.4] -> 16.0.1 (*)
| +--- com.android.support:exifinterface:26.1.0
| | \--- com.android.support:support-annotations:26.1.0 -> 27.1.1
| +--- com.android.support:support-annotations:26.1.0 -> 27.1.1
| \--- com.android.support:support-v4:26.1.0 (*)
+--- project :react-native-vector-icons
| \--- com.facebook.react:react-native:+ -> 0.57.4 (*)
+--- project :react-native-maps
| +--- com.google.android.gms:play-services-base:11.0.4 -> 16.0.1 (*)
| +--- com.google.android.gms:play-services-maps:11.0.4
| | +--- com.google.android.gms:play-services-base:[11.0.4] -> 16.0.1 (*)
| | \--- com.google.android.gms:play-services-basement:[11.0.4] -> 16.0.1 (*)
| \--- com.google.maps.android:android-maps-utils:0.5+ -> 0.5
+--- project :react-native-push-notification
| +--- com.android.support:appcompat-v7:26.1.0 -> 27.1.1 (*)
| +--- com.facebook.react:react-native:+ -> 0.57.4 (*)
| +--- com.google.android.gms:play-services-gcm:11.0.4
| | +--- com.google.android.gms:play-services-base:[11.0.4] -> 16.0.1 (*)
| | +--- com.google.android.gms:play-services-basement:[11.0.4] -> 16.0.1 (*)
| | \--- com.google.android.gms:play-services-iid:[11.0.4] -> 11.0.4
| | +--- com.google.android.gms:play-services-base:[11.0.4] -> 16.0.1 (*)
| | \--- com.google.android.gms:play-services-basement:[11.0.4] -> 16.0.1 (*)
| +--- me.leolin:ShortcutBadger:1.1.8
| \--- com.google.firebase:firebase-messaging:+ -> 17.3.4
| +--- com.google.android.gms:play-services-basement:16.0.1 (*)
| +--- com.google.android.gms:play-services-tasks:16.0.1 (*)
| +--- com.google.firebase:firebase-common:16.0.3
| | +--- com.google.android.gms:play-services-basement:16.0.1 (*)
| | \--- com.google.android.gms:play-services-tasks:16.0.1 (*)
| +--- com.google.firebase:firebase-iid:[17.0.4] -> 17.0.4
| | +--- com.google.android.gms:play-services-basement:16.0.1 (*)
| | +--- com.google.android.gms:play-services-stats:16.0.1
| | | \--- com.google.android.gms:play-services-basement:16.0.1 (*)
| | +--- com.google.android.gms:play-services-tasks:16.0.1 (*)
| | +--- com.google.firebase:firebase-common:16.0.3 (*)
| | \--- com.google.firebase:firebase-iid-interop:16.0.1
| | +--- com.google.android.gms:play-services-base:16.0.1 (*)
| | \--- com.google.android.gms:play-services-basement:16.0.1 (*)
| \--- com.google.firebase:firebase-measurement-connector:17.0.1
| \--- com.google.android.gms:play-services-basement:16.0.1 (*)
+--- com.google.android.gms:play-services-gcm:11.0.4 (*)
\--- project :react-native-barcode-scanner-google
+--- com.google.android.gms:play-services-vision:11.0.4 (*)
\--- com.facebook.react:react-native:0.20.+ -> 0.57.4 (*)
I see that there are some mismatching versions, but I don't really know how to correctly track or correct them. 我看到有一些不匹配的版本,但是我真的不知道如何正确地跟踪或纠正它们。
This is my build.gradle: 这是我的build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
buildToolsVersion = "27.0.3"
minSdkVersion = 19
compileSdkVersion = 27
targetSdkVersion = 26
supportLibVersion = "27.1.1"
}
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.4'
}
}
allprojects {
repositories {
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"
}
}
}
ext {
compileSdkVersion = 26
targetSdkVersion = 26
buildToolsVersion = "26.0.2"
supportLibVersion = "26.1.0"
googlePlayServicesVersion = "11.0.4"
androidMapsUtilsVersion = "0.5+"
}
task wrapper(type: Wrapper) {
gradleVersion = '4.4'
distributionUrl = distributionUrl.replace("bin", "all")
}
// Application level
apply plugin: "com.android.application"
import com.android.build.OutputFile
project.ext.react = [
entryFile: "index.js"
]
apply from: "../../node_modules/react-native/react.gradle"
def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId "com.dpassapp"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include "armeabi-v7a", "x86"
}
}
buildTypes {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
def versionCodes = ["armeabi-v7a":1, "x86":2]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
}
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
implementation "com.facebook.react:react-native:+" // From node_modules
implementation project(':react-native-ble-manager')
implementation project(':react-native-camera')
implementation project(':react-native-vector-icons')
implementation project(':react-native-maps')
implementation project(':react-native-push-notification')
implementation ('com.google.android.gms:play-services-gcm:11.0.4') {
force = true;
}
implementation project(':react-native-barcode-scanner-google')
}
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
Does anyone know what could I be missing? 有谁知道我可能会错过什么? Or how to properly debug depency version conflicts? 或者如何正确调试依赖版本冲突?
Do this may help you : 这样做可以帮助您:
react-native link
and 和
react-native link (your dependency name)
like this : 像这样 :
react-native link react-native-push-notification
I have an issue like yours and this helped me 我遇到了像您这样的问题,这对我有所帮助
good luck 祝好运
In dependency version conflicts (such as Google Play Services) best thing to do is fix the dependency in the top level gradle as you have done and then exclude the dependency from conflicting libraries. 在依赖版本冲突(例如Google Play服务)中,最好的方法是像以前一样在顶级gradle中修复依赖,然后从冲突库中排除依赖。
compile(project(":react-native-push-notification")){ exclude group: "com.google.android.gms" }
However, make sure the proper version compatible with all the dependencies are fixed in the top level gradle. 但是,请确保与所有依赖项兼容的正确版本已在顶层gradle中固定。
I found that there were 2 (similar) reasons why my app was crashing. 我发现有2个(相似的)原因导致我的应用崩溃。
The first one was easier to fix. 第一个更容易修复。 But I had a really hard time figuring out why I couldn't force all google services to the same version, I kept getting errors messages that the libraries couldn't be found in the repository. 但是我很难弄清楚为什么我不能将所有的google服务都强制使用相同的版本,我不断收到错误消息,指出在存储库中找不到这些库。 The problem was not all dependencies have the same minor/patch versions (as listed here ). 这个问题是不是所有的相关性具有相同的次要/补丁的版本(如上市这里 )。
eg: com.google.android.gms:play-services-base latest version is 16.0.1 (doesn't even have 16.0.0), whereas com.google.android.gms:play.services.maps lastest version is 16.0.0. 例如:com.google.android.gms:play-services-base的最新版本是16.0.1(甚至没有16.0.0),而com.google.android.gms:play.services.maps的最新版本是16.0 .0。 So If I hardcoded any of these version, the other one would throw a not found error. 因此,如果我对这些版本中的任何一个进行了硬编码,则另一个将引发未找到的错误。
To solve this, I had to force all google services libraries to the same major version, so it could fetch the correct version for each one. 为了解决这个问题,我不得不将所有google服务库都强制使用相同的主要版本,以便可以为每个版本获取正确的版本。
Adding these lines to my top-level build.gradle solved it: 将这些行添加到我的顶级build.gradle中可以解决此问题:
subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
// force all android support dependencies to 27.1.1
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "27.1.1"
}
// force all google services libraries to the same latest major version
if(details.requested.group == 'com.google.android.gms') {
details.useVersion '16.+'
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.