无法构建一个(新创建的)弹出的 Expo 项目。
无法构建一个(新创建的)弹出的 Expo 项目。
我正在尝试将react-native-firebase添加到一个新创建的expo项目中,我已成功地eject了应用程序,但是当我尝试添加库时,项目无法构建,我收到以下错误消息:
错误:在项目'app'中,已解析的Google Play服务库依赖项依赖于另一个确切版本(例如"[15.0. 1]"),但未解析为该版本。库所表现出的行为将是未知的。 依赖项失败:com.google.android.gms:play-services-flags:15.0.1 -> com.google.android.gms:play-services-basement @[ 15.0.1],但play-services-basement版本为16.2.0。
我已更新了所有的firebase依赖项,但仍然失败,然后我使用了这行代码来强制停止错误,以便至少可以构建:
com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true
之前的错误消失了,但我仍然遇到其他错误,例如:
错误:程序类型已存在:com.google.android.gms.internal.measurement.zzbk
平台:Ubuntu 19:04
expo:最新版本
react-native-firebase:5.2.5
gradle(项目)文件
// 顶级构建文件,您可以在其中添加所有子项目/模块的配置选项。 buildscript { repositories { google() jcenter() maven { url 'https://dl.bintray.com/android/android-tools/' } } dependencies { classpath 'com.android.tools.build:gradle:3.3.2' // classpath 'com.google.gms:google-services:3.2.1' classpath 'de.undercouch:gradle-download-task:2.0.0' classpath 'com.amazonaws:aws-devicefarm-gradle-plugin:1.3' // https://github.com/awslabs/aws-device-farm-gradle-plugin/releases classpath 'com.google.gms:google-services:4.2.0' } } allprojects { repositories { google() jcenter() // For non-detach maven { url "$rootDir/maven" } // For old expoviews to work maven { url "$rootDir/versioned-abis/expoview-abi26_0_0/maven" } maven { url "$rootDir/versioned-abis/expoview-abi27_0_0/maven" } maven { url "$rootDir/versioned-abis/expoview-abi28_0_0/maven" } maven { url "$rootDir/versioned-abis/expoview-abi29_0_0/maven" } maven { url "$rootDir/versioned-abis/expoview-abi30_0_0/maven" } maven { url "$rootDir/versioned-abis/expoview-abi31_0_0/maven" } maven { url "$rootDir/versioned-abis/expoview-abi32_0_0/maven" } // For detach maven { url "$rootDir/../node_modules/expokit/maven" } maven { // We use a modified build of com.android.support.test:runner:1.0.1. Explanation in maven-test/README url "$rootDir/maven-test" } maven { // Local Maven repo containing AARs with JSC built for Android url "$rootDir/../node_modules/jsc-android/dist" } flatDir { dirs 'libs' // dirs project(':expoview').file('libs') } // https://github.com/google/ExoPlayer/issues/5225#issuecomment-445739013 maven { url 'https://google.bintray.com/exoplayer' } maven { url "https://jitpack.io" } // Want this last so that we never end up with a stale cache mavenLocal() } } task clean(type: Delete) { delete rootProject.buildDir }
gradle(应用程序)
buildscript { repositories { google() maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'io.fabric.tools:gradle:1.26.1' } } apply plugin: 'com.android.application' apply plugin: 'io.fabric' apply plugin: 'devicefarm' repositories { maven { url 'https://maven.fabric.io/public' } } android { compileSdkVersion 27 defaultConfig { applicationId 'expo.reactnative.test' minSdkVersion 21 targetSdkVersion 26 versionCode 1 versionName '1.0.0' ndk { abiFilters 'armeabi-v7a', 'x86' } multiDexEnabled true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" // Deprecated. Used by net.openid:appauth manifestPlaceholders = [ 'appAuthRedirectScheme': 'host.exp.exponent' ] } dexOptions { javaMaxHeapSize System.getenv("DISABLE_DEX_MAX_HEAP") ? null : "8g" } flavorDimensions 'remoteKernel' productFlavors { devKernel { dimension 'remoteKernel' } prodKernel { dimension 'remoteKernel' } } signingConfigs { debug { storeFile file('../debug.keystore') } release { storeFile file(System.getenv("ANDROID_KEYSTORE_PATH") ?: "release-key.jks") storePassword System.getenv("ANDROID_KEYSTORE_PASSWORD") keyAlias System.getenv("ANDROID_KEY_ALIAS") keyPassword System.getenv("ANDROID_KEY_PASSWORD") } } buildTypes { debug { debuggable true ext.enableCrashlytics = false } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } } lintOptions { abortOnError false } packagingOptions { pickFirst "**" } configurations.all { resolutionStrategy.force 'com.android.support:design:27.1.0' } } devicefarm { projectName System.getenv("DEVICEFARM_PROJECT_NAME") devicePool System.getenv("DEVICEFARM_DEVICE_POOL") executionTimeoutMinutes 40 authentication { accessKey System.getenv("AWS_ACCESS_KEY_ID") secretKey System.getenv("AWS_SECRET_ACCESS_KEY") } } configurations.all { resolutionStrategy { force 'org.webkit:android-jsc:r224109' } } // 当准备SHELL时,从这里开始删除 apply from: 'expo.gradle' // 当准备SHELL时,从这里停止删除 dependencies { implementation project(':react-native-firebase') implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.google.firebase:firebase-core:16.0.9' implementation 'com.google.firebase:firebase-analytics:16.5.0' // Firebase dependencies implementation "com.google.android.gms:play-services-base:16.1.0" // implementation 'com.android.support:multidex:1.0.1' // Our dependencies implementation 'com.android.support:appcompat-v7:27.1.1' // Our dependencies from ExpoView // DON'T ADD ANYTHING HERE THAT ISN'T IN EXPOVIEW. ONLY COPY THINGS FROM EXPOVIEW TO HERE. implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.facebook.android:facebook-android-sdk:4.37.0' implementation('com.facebook.android:audience-network-sdk:4.99.0') { exclude module: 'play-services-ads' } compileOnly 'org.glassfish:javax.annotation:3.1.1' implementation 'com.jakewharton:butterknife:8.4.0' implementation 'de.greenrobot:eventbus:2.4.0' // Be careful when upgrading! Upgrading might break experience scoping. Check with Jesse. See Analytics.resetAmplitudeDatabaseHelper implementation 'com.amplitude:android-sdk:2.9.2' implementation 'com.squareup.picasso:picasso:2.5.2' implementation 'com.google.android.gms:play-services-gcm:16.1.0' implementation 'com.google.android.gms:play-services-analytics:16.0.8' implementation 'com.google.android.gms:play-services-maps:16.1.0' implementation 'com.google.android.gms:play-services-auth:16.0.1' implementation 'com.google.android.gms:play-services-location:16.0.0' implementation 'com.google.android.gms:play-services-ads:17.2.0' annotationProcessor 'com.raizlabs.android:DBFlow-Compiler:2.2.1' implementation "com.raizlabs.android:DBFlow-Core:2.2.1" implementation "com.raizlabs.android:DBFlow:2.2.1" implementation "com.madgag.spongycastle:core:1.53.0.0" implementation "com.madgag.spongycastle:prov:1.53.0.0" debugImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1' // debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.4-beta1' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1' implementation 'com.facebook.device.yearclass:yearclass:2.1.0' implementation 'commons-io:commons-io:1.4' implementation 'me.leolin:ShortcutBadger:1.1.4@aar' implementation 'com.theartofdev.edmodo:android-image-cropper:2.7.0' implementation 'com.yqritc:android-scalablevideoview:1.0.1' implementation 'commons-codec:commons-codec:1.10' implementation 'com.segment.analytics.android:analytics:4.3.0' implementation 'com.google.zxing:core:3.3.3' implementation 'net.openid:appauth:0.4.1' implementation('com.airbnb.android:lottie:2.5.5') { exclude group: 'com.android.support', module: 'appcompat-v7' } implementation('io.nlopez.smartlocation:library:3.2.11') { transitive = false } implementation 'com.android.support:exifinterface:27.1.1' implementation 'com.squareup.okio:okio:1.9.0' implementation 'com.facebook.soloader:soloader:0.5.1' implementation 'com.google.android.exoplayer:exoplayer:2.6.1' implementation 'expolib_v1.com.google.android.exoplayer:expolib_v1-extension-okhttp:2.6.1@aar' // expo-file-system implementation 'com.squareup.okhttp3:okhttp:3.10.0' implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.10.0' // Testing androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' // We use a modified build of com.android.support.test:runner:1.0.1. Explanation in maven-test/README androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support:support-annotations:27.1.1' androidTestImplementation 'com.google.code.findbugs:jsr305:3.0.0' androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' androidTestImplementation 'com.azimolabs.conditionwatcher:conditionwatcher:0.2' testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:1.10.19' testImplementation 'org.robolectric:robolectric:3.8' testImplementation 'com.android.support.test:runner:1.0.2-alpha1' testImplementation 'com.android.support.test:rules:1.0.2-alpha1' implementation('host.exp.exponent:expoview:32.0.0@aar') { transitive = true exclude group: 'com.squareup.okhttp3', module: 'okhttp' exclude group: 'com.squareup.okhttp3', module: 'okhttp-urlconnection' } api 'com.facebook.react:react-native:32.0.0' api 'host.exp.exponent:expo-app-loader-provider:1.0.0' api 'host.exp.exponent:expo-core:2.0.0' api 'host.exp.exponent:expo-constants-interface:2.0.0' api 'host.exp.exponent:expo-constants:2.0.1' api 'host.exp.exponent:expo-errors:1.0.0' api 'host.exp.exponent:expo-file-system-interface:2.0.0' api 'host.exp.exponent:expo-file-system:2.0.0' api 'host.exp.exponent:expo-image-loader-interface:2.0.0' api 'host.exp.exponent:expo-permissions:2.0.0' api 'host.exp.exponent:expo-permissions-interface:2.0.0' api 'host.exp.exponent:expo-sensors-interface:2.0.0' api 'host.exp.exponent:expo-react-native-adapter:2.0.0' api 'host.exp.exponent:expo-task-manager:1.0.0' api 'host.exp.exponent:expo-task-manager-interface:1.0.0' // Optional universal modules, could be removed // along with references in MainActivity api 'host.exp.exponent:expo-ads-admob:2.0.0' api 'host.exp.exponent:expo-app-auth:2.0.0' api 'host.exp.exponent:expo-analytics-segment:2.0.0' api 'host.exp.exponent:expo-barcode-scanner-interface:2.0.0' api 'host.exp.exponent:expo-barcode-scanner:2.0.0' api 'host.exp.exponent:expo-camera-interface:2.0.0' api 'host.exp.exponent:expo-camera:2.0.0' api 'host.exp.exponent:expo-contacts:2.0.0' api 'host.exp.exponent:expo-face-detector:2.0.0' api 'host.exp.exponent:expo-face-detector-interface:2.0.0' api 'host.exp.exponent:expo-font:2.0.0' api 'host.exp.exponent:expo-gl-cpp:2.0.0' api 'host.exp.exponent:expo-gl:2.0.0' api 'host.exp.exponent:expo-google-sign-in:2.0.0' api 'host.exp.exponent:expo-local-authentication:2.0.0' api 'host.exp.exponent:expo-localization:2.0.0' api 'host.exp.exponent:expo-location:2.0.1' api 'host.exp.exponent:expo-media-library:2.0.0' api 'host.exp.exponent:expo-print:2.0.0' api 'host.exp.exponent:expo-sensors:2.0.0' api 'host.exp.exponent:expo-sms:2.0.0' api 'host.exp.exponent:expo-background-fetch:1.0.0' } // 这必须放在下面 apply plugin: 'com.google.gms.google-services' } // 这必须放在下面 apply plugin: 'com.google.gms.google-services' com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true
问题出现的原因是在构建新创建的 ejected expo 项目时失败。解决方法是将以下代码添加到 build.gradle 文件中的 allprojects 部分:
maven { url "$rootDir/../node_modules/expo-camera/android/maven" }
完整的 build.gradle 文件内容如下:
allprojects { repositories { mavenLocal() maven { url("$rootDir/../node_modules/react-native/android") } maven { url("$rootDir/../node_modules/jsc-android/dist") } maven { url "$rootDir/../node_modules/expo-camera/android/maven" } google() jcenter() maven { url 'https://jitpack.io' } } }