ClassNotFoundException для FirebaseInitProvider только в API28 - PullRequest
0 голосов
/ 06 января 2019

Я использую firebase для нескольких сервисов (аналитика, firestore, crash ...) и все обычно работает нормально.

Но всякий раз, когда я запускаю свое приложение на устройстве API 28, я получаю следующую ошибку:

java.lang.RuntimeException: невозможно получить провайдера com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: не нашел класс "com.google.firebase.provider.FirebaseInitProvider" по пути: DexPathList [[почтовый файл "/data/app/[...]

Это случилось со многими до меня (как можно было видеть здесь , здесь , здесь или здесь ), но никто описывает такое поведение, селективное к API (часто даже наоборот, оно работает на новых API и вылетает на старых).

Я мог бы проверить это на нескольких устройствах и получить следующие результаты:

  • это работало как прелесть в API 22, 23 и 26 (эмуляторы genymotion)
  • сбой на API 28 (эмулятор и настоящий One Plus 6)

Я использую плагин com.getkeepsafe.dexcount, чтобы убедиться, что мне действительно не нужен мультидекс. Вот вывод:

Methods remaining in app-dev-debug.apk: 15744
Fields remaining in app-dev-debug.apk:  33647
Classes remaining in app-dev-debug.apk:  59277

Вот мой app модуль build.gradle (но не стесняйтесь просить больше или другой код):

apply {
    plugin 'com.android.application'
    plugin 'io.fabric'
    plugin 'realm-android'
    plugin 'com.google.gms.google-services'
    plugin 'com.getkeepsafe.dexcount'
}


android {
    compileSdkVersion 28
    defaultConfig {
        minSdkVersion 17
        targetSdkVersion 28
        versionCode = 54
        versionName = "4.1.0"
        multiDexEnabled false
    }
    buildTypes {
        release {
            debuggable false
            minifyEnabled true
            shrinkResources true
            manifestPlaceholders = [crashlyticsEnabled: true]
            ext.enableCrashlytics = true
            useProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    getDefaultProguardFile('proguard-android-optimize.txt'),
                    'proguard-rules.pro'
            signingConfig signingConfigs.seqa_free
        }
        debug {
            debuggable true
            minifyEnabled true
            shrinkResources false
            manifestPlaceholders = [crashlyticsEnabled: false]
            ext.enableCrashlytics = false
            useProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    getDefaultProguardFile('proguard-android-optimize.txt'),
                    'proguard-rules.pro'
            //proguard-rules.pro = just one line: "-dontobfuscate"
        }
    }
    flavorDimensions "stage"
    productFlavors {
        dev {
            versionNameSuffix "-dev"
            applicationIdSuffix '.dev'
            resConfigs "fr", "xxhdpi"
        }
        prod {
            signingConfig signingConfigs.seqa_free
        }
    }
    lintOptions {
        disable 'InvalidPackage'
        return void
    }
    dataBinding {
        enabled = true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

realm {
    syncEnabled = true
}

dependencies {//some are defined on the project builde.gradle
    implementation project(path: ':core')
    implementation project(path: ':data')
    implementation project(path: ':crunches')
    //Firebase
    implementation firebaseDependencies.core
    implementation firebaseDependencies.auth
    implementation firebaseDependencies.firestore
    implementation firebaseDependencies.ui_auth
    //support
    implementation supportDependencies.appcompat
    implementation supportDependencies.customtabs
    implementation supportDependencies.preference
    implementation supportDependencies.recyclerview
    implementation supportDependencies.cardview
    implementation supportDependencies.design
    implementation supportDependencies.constraint_layout
    //3 old crashlytics supports...
    implementation supportDependencies.support_v4
    implementation supportDependencies.animated_vector_drawable
    implementation supportDependencies.support_media_compat
    //indispensables
    implementation sharedDependencies.crashlytics
    implementation sharedDependencies.realm
    implementation sharedDependencies.threetenabp
    implementation sharedDependencies.butterknife
    annotationProcessor sharedDependencies.butterknife_annotation
    //Others
    implementation 'com.pavelsikun:material-seekbar-preference:2.3.0'
    implementation 'com.github.PhilJay:MPAndroidChart:v3.0.2'
    implementation 'com.github.bumptech.glide:glide:4.4.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.4.0'
    implementation 'net.cachapa.expandablelayout:expandablelayout:2.9.2'
    implementation 'com.facebook.stetho:stetho:1.5.0'
    implementation 'com.uphyca:stetho_realm:2.2.2'
}

Я пытался ответить на другие вопросы, например, добавить мультидекс (даже если он мне явно не нужен), но это не помогло. Ни очистки моего проекта или восстановления.

В чем может быть моя проблема с API 28?

...