该应用可以从Android Studio构建并正常运行,但是在我构建签名的APK并上传到Google Play商店后,请从Play商店下载到设备上,该应用将在首次启动时崩溃。随后启动该应用程序运行正常。
这是最初启动崩溃时的日志猫。
--------- beginning of crash
08-02 14:47:05.629 8343-8343/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.company.app, PID: 8343
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/internal/zzbq;
at com.google.android.gms.internal.zzark.zzbl(Unknown Source)
at com.google.android.gms.analytics.CampaignTrackingReceiver.onReceive(Unknown Source)
at host.exp.exponent.referrer.InstallReferrerReceiver.onReceive(InstallReferrerReceiver.java:34)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3165)
at android.app.ActivityThread.-wrap18(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1630)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6351)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:896)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.internal.zzbq" on path: DexPathList[[zip file "/data/app/com.company.app-1/base.apk"],nativeLibraryDirectories=[/data/app/com.company.app-1/lib/arm, /data/app/com.company.app-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.google.android.gms.internal.zzark.zzbl(Unknown Source)
at com.google.android.gms.analytics.CampaignTrackingReceiver.onReceive(Unknown Source)
at host.exp.exponent.referrer.InstallReferrerReceiver.onReceive(InstallReferrerReceiver.java:34)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3165)
at android.app.ActivityThread.-wrap18(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1630)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6351)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:896)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)
这是build.gradle
def DEFAULT_COMPILE_SDK_VERSION = 27
def DEFAULT_BUILD_TOOLS_VERSION = "27.0.3"
def DEFAULT_TARGET_SDK_VERSION = 26
def DEFAULT_GOOGLE_PLAY_SERVICES_VERSION = "15.0.1"
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
// apply plugin: 'com.neenbedankt.android-apt'
def keystorePropertiesFile = rootProject.file("keystore.properties");
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
repositories {
maven { url 'https://maven.fabric.io/public' }
}
android {
compileSdkVersion rootProject.hasProperty('compileSdkVersion') ? rootProject.compileSdkVersion : DEFAULT_COMPILE_SDK_VERSION
buildToolsVersion rootProject.hasProperty('buildToolsVersion') ? rootProject.buildToolsVersion : DEFAULT_BUILD_TOOLS_VERSION
defaultConfig {
applicationId 'com.company.app'
targetSdkVersion rootProject.hasProperty('targetSdkVersion') ? rootProject.targetSdkVersion : DEFAULT_TARGET_SDK_VERSION
versionCode 26
versionName '0.2.6'
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 {
keepRuntimeAnnotatedClasses false
jumboMode true
javaMaxHeapSize System.getenv("DISABLE_DEX_MAX_HEAP") ? null : "8g"
}
signingConfigs {
debug {
storeFile file('../debug.keystore')
}
release {
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
}
}
flavorDimensions 'default'
productFlavors {
// Define separate dev and prod product flavors.
dev {
// dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
// to pre-dex each module and produce an APK that can be tested on
// Android Lollipop without time consuming dex merging processes.
minSdkVersion 21
dimension 'default'
}
devRemoteKernel {
minSdkVersion 21
dimension 'default'
}
prod {
// The actual minSdkVersion for the application.
minSdkVersion 21
dimension 'default'
}
}
buildTypes {
debug {
debuggable true
}
release {
minifyEnabled false
multiDexEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
zipAlignEnabled true
signingConfig signingConfigs.release
}
}
lintOptions {
abortOnError false
}
packagingOptions {
pickFirst "**"
}
}
apply from: 'expo.gradle'
dependencies {
def googlePlayServicesVersion = rootProject.hasProperty("googlePlayServicesVersion") ? rootProject.googlePlayServicesVersion : DEFAULT_GOOGLE_PLAY_SERVICES_VERSION
implementation project(":react-native-firebase")
implementation fileTree(include: ["*.jar"], dir: "libs")
implementation"com.android.support:multidex:1.0.3"
// Our dependencies
implementation ("com.google.android.gms:play-services-base:$googlePlayServicesVersion"){ force = true }
implementation "com.google.firebase:firebase-core:16.0.1"
implementation "com.google.firebase:firebase-messaging:17.1.0"
// 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.7.0"
implementation 'com.facebook.android:audience-network-sdk:4.28.2'
compileOnly "org.glassfish:javax.annotation:3.1.1"
implementation"com.jakewharton:butterknife:7.0.1"
implementation"de.greenrobot:eventbus:2.4.0"
implementation"com.amplitude:android-sdk:2.9.2"
// Be careful when upgrading! Upgrading might break experience scoping. Check with Jesse. See Analytics.resetAmplitudeDatabaseHelper
implementation"com.squareup.picasso:picasso:2.5.2"
implementation("com.google.android.gms:play-services-gcm:$googlePlayServicesVersion"){ force = true }
// implementation("com.google.android.gms:play-services-analytics:12.0.1"){ force = true }
implementation("com.google.android.gms:play-services-maps:$googlePlayServicesVersion"){ force = true }
// implementation("com.google.android.gms:play-services-auth:$googlePlayServicesVersion"){ force = true }
implementation("com.google.android.gms:play-services-location:$googlePlayServicesVersion"){ force = true }
// implementation("com.google.android.gms:play-services-ads:$googlePlayServicesVersion"){ force = true }
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:1.0.1"
implementation "commons-io:commons-io:1.3.2"
implementation "me.leolin:ShortcutBadger:1.1.4@aar"
implementation "com.nostra13.universalimageloader:universal-image-loader:1.9.5"
implementation "com.theartofdev.edmodo:android-image-cropper:2.4.7"
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.2.1"
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.branch.sdk.android:library:2.17.1"
implementation("io.nlopez.smartlocation:library:3.2.11") {
transitive = false
}
implementation"com.android.support:exifinterface:27.1.1"
implementation"com.squareup.okhttp3:okhttp:3.4.1"
implementation"com.squareup.okhttp3:okhttp-urlconnection:3.4.1"
implementation"com.squareup.okhttp3:okhttp-ws:3.4.1"
implementation"com.squareup.okio:okio:1.9.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"
implementation("host.exp.exponent:expoview:28.0.0@aar") {
transitive = true
}
implementation project(":react-native-twilio-video-webrtc")
// implementation "me.leolin:ShortcutBadger:1.1.21@aar" // <-- Add this line if you wish to use badge on Android
implementation "com.android.support:design:27.1.1"
}
// This has to be down here for some reason
apply plugin: 'com.google.gms.google-services'
任何想法都将不胜感激!