Подтвердить что ты не робот

Не нашел класс "com.google.firebase.provider.FirebaseInitProvider"?

Я получаю следующее исключение при запуске приложения.

java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.vfirst.ifbagro-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.vfirst.ifbagro-1, /vendor/lib, /system/lib]]
at android.app.ActivityThread.installProvider(ActivityThread.java:4993)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4596)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4536)
at android.app.ActivityThread.access$1300(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5214)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.vfirst.ifbagro-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.vfirst.ifbagro-1, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.ActivityThread.installProvider(ActivityThread.java:4978)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4596) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4536) 
at android.app.ActivityThread.access$1300(ActivityThread.java:149) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5214) 
at java.lang.reflect.Method.invokeNative(Native Method) 

Вот уровень сборки build.gradle

apply plugin: 'com.android.application'
apply plugin: 'android-apt' 

android {
compileSdkVersion 24
buildToolsVersion "24.0.1"

defaultConfig {
    applicationId "com.vfirst.ifbagro"
    minSdkVersion 17
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])


compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:design:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
compile 'com.google.android.gms:play-services-gcm:9.4.0'
compile 'com.google.android.gms:play-services-location:9.4.0'
compile 'com.android.support:multidex:1.0.1'
compile 'com.google.firebase:firebase-messaging:9.4.0'
compile 'com.google.android.gms:play-services:9.4.0'
testCompile 'junit:junit:4.12'
}

apply plugin: 'com.google.gms.google-services'

Это мой уровень приложения build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
    jcenter()
    mavenCentral()
}
dependencies {
    classpath 'com.android.tools.build:gradle:2.2.0'
    classpath 'com.google.gms:google-services:3.0.0'
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    classpath 'com.google.gms:google-services:3.0.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
}

allprojects {
repositories {
    jcenter()
}
}

task clean(type: Delete) {
     delete rootProject.buildDir
}

Как решить проблему?

4b9b3361

Ответ 1

У меня была та же ошибка, и я решил ее с помощью MultiDex, как описано по этой ссылке: https://developer.android.com/studio/build/multidex.html


Иногда недостаточно просто включить MultiDex.

Если какой-либо класс, который требуется при запуске, не указан в основном файле DEX, то ваше приложение вылетает с ошибкой java.lang.NoClassDefFoundError. https://developer.android.com/studio/build/multidex#keep

FirebaseInitProvider требуется при запуске.

Поэтому вы должны вручную указать FirebaseInitProvider, как это требуется в основном DEX файле.

файл build.gradle

android {
    buildTypes {
        release {
            multiDexKeepFile file('multidex-config.txt')
            ...
        }
    }
}

multidex-config.txt (в том же каталоге, что и файл build.gradle)

com/google/firebase/provider/FirebaseInitProvider.class

Ответ 2

Я тоже столкнулся с той же проблемой и, наконец, решил ее, отключив Instant Run в андроид-студии.

Настройки → Построение, выполнение, развертывание → Мгновенный запуск и снимите флажок Включить мгновенный запуск

Обновление:

В последней версии Android Studio 3 нет функции мгновенного запуска. 5+. Это должно быть применимо только для более старых версий.

Ответ 3

В файле build.gradle(Module: app) вставьте следующий код в defaultConfig:

  defaultConfig {
        applicationId "com.***.****"
minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

и вставить в зависимости:

compile 'com.android.support:multidex:1.0.1'

Затем добавьте код для манифеста:

<application 
    android:name="android.support.multidex.MultiDexApplication"

Ответ 4

У меня была такая же проблема в моем проекте (YouTube player)... и следующее решение проблемы для меня:

  1. Добавьте этот код в свой build.gradle (module: app) внутри defaultConfing:

    defaultConfig {
        ....
        ....
        multiDexEnabled = true
    }
    
  2. Добавьте этот код в свои build.gradle dependencies build.gradle (module: app):

    dependencies {
        compile 'com.android.support:multidex:1.0.1'
        .....
        .....
    }
    
  3. Откройте AndroidManifest.xml и внутри application:

    <application
        android:name="android.support.multidex.MultiDexApplication"
        .....
        .....
    </application>
    

    или если у вас есть класс App, расширьте его из MultiDexApplication, например:

    public class MyApp extends MultiDexApplication {
    .....
    

И, наконец, я думаю, что вы должны иметь Android Support Repository, загруженный в Extras в SDK Manager.

Ответ 5

Просто переопределите следующий метод в своем классе приложения.

public class YourApplication extends Application {

    @Override
    protected void attachBaseContext(Context context) {
        super.attachBaseContext(context);
        MultiDex.install(this);
    }
    @Override
    public void onCreate() {
        super.onCreate();
        Realm.init(this); //initialize other plugins 

    }
}

Ответ 6

Включение multidex не является хорошим решением, потому что multidex имеет другое использование в android, чтобы увидеть этот ответ что такое multidex

Решение отключает мгновенный запуск, как @Shylendra Madda сказал

Настройки → Сборка, выполнение, развертывание → Мгновенный запуск и снятие флажка Включить мгновенный запуск

Я думаю, что причина этой проблемы в том, что когда мгновенный запуск включен, Android Studio не помещает библиотеки, такие как firebase, в сгенерированный apk, чтобы уменьшить время сборки проекта, потому что библиотека firebase и другие библиотеки, такие как maps и другие существуют в игровых сервисах, а игровые сервисы установлены на устройстве Android, поэтому, если мгновенный запуск включен, не нужно помещать их в сгенерированный apk сделать время сборки быстрее.

Итак, когда вы извлекаете apk и устанавливаете его на другое устройство, вы увидите это исключение

Ответ 7

  Когда ваше приложение и библиотеки, на которые оно ссылается, превышают 65 536 методов, вы сталкиваетесь с ошибкой сборки, которая указывает, что ваше приложение достигло предел архитектуры сборки Android

Чтобы избежать этого ограничения, вы должны настроить свое приложение на мультидекс

Если ваш minSdkVersion установлен на 21 или выше, все, что вам нужно сделать, это  установите для multiDexEnabled значение true в файле build.gradle уровня модуля, как  показано здесь:

android {
    defaultConfig {
        ...
        minSdkVersion 21 
        multiDexEnabled true
    }
    ...   
}

Однако, если ваш minSdkVersion установлен на 20 или ниже, то вы должны  используйте библиотеку поддержки multidex следующим образом:

1. Модифицируйте файл build.gradle уровня модуля, чтобы включить мультидекс, и добавьте мультидексную библиотеку в качестве зависимости, как показано здесь:

android {
    defaultConfig {
        ...
        minSdkVersion 15 
        multiDexEnabled true
    }
    ...
 }

dependencies {
        implementation 'com.android.support:multidex:1.0.3'
}

2. В зависимости от того, переопределите ли вы класс Application, выполните одно из следующих действий:

  • Если вы не переопределяете класс Application, отредактируйте файл манифеста, указав в теге android: name следующее:

    <application
        android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
  • Иначе, если вы переопределяете класс Application, измените его на расширение MultiDexApplication (если возможно) следующим образом:

   public class MyApplication extends MultiDexApplication { ... }
  • В противном случае вы переопределяете класс Application, но изменить базовый класс невозможно, тогда вместо этого вы можете переопределить метод attachBaseContext() и вызов MultiDex.install(this) для включения multidex:

   public class MyApplication extends SomeOtherApplication {
     @Override
     protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
     }
   }

Ответ 8

Я также сталкиваюсь с той же проблемой, попробовав все решение, которое я нашел ниже.

Если вы применили правила proguard, добавьте строку ниже в правила ProGuard

-keep class com.google.firebase.provider.FirebaseInitProvider

и его решить мою проблему.

Ответ 9

1: Перейдите к включению gradle multiDexEnabled и добавьте мультидексную библиотеку в зависимости.

android {
   ...
   defaultConfig {
      multiDexEnabled true
      ...
   }
}

dependencies {
  // add dependency 
  implementation 'com.android.support:multidex:1.0.1'
}

2: Перейдите в файл манифеста и напишите android: name = ". MyApplication" (имя класса (MyApplication) необязательно, вы можете написать все, что захотите).

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        .
        .
        .
        .
        .
    </application>

3: Как вы писали, android: name = ". MyApplication" внутри приложения в файле манифеста. это даст вам ошибку, потому что вы не создали класс MyApplication. Создайте класс MyApplication, расширьте его классом "application" или просто нажмите. MyApplication, маленький красный шарик появится слева от синтаксиса, щелкните его, вы увидите (создайте класс MyApplication) в меню, щелкните его и включите. Метод ниже Внутри этого класса.

    public class MyApplication extends Application {

    @Override 
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    } 

Если вы хотите получить больше информации, нажмите эту ссылку: [ https://developer.android.com/studio/build/multidex.html]

Надеюсь, это работает для вас.

Ответ 10

Если вы используете MultiDex в своем приложении Gradle, измените расширяет приложение на , расширяя MultiDexApplication в своем классе приложения. Он будет демонстративно работать

Ответ 11

Сначала добавьте следующее в build.gradle(Module: app) ---- >

defaultConfig{
..
multiDexEnabled true
..
}

Затем в том же файле добавьте следующий

dependencies{
...
compile 'com.android.support:multidex:1.0.1'
...
}

Затем в AndroidManifest.xml напишите следующее

<application
    android:name="android.support.multidex.MultiDexApplication"
    .....
    .....
</application>

Что это. Это определенно будет работать

Ответ 12

У меня была такая же проблема, и я решил просто добавить фрагмент кода. Если вы получаете эту проблему, значит, вы уже выполнили все шаги, которые необходимо использовать Firebase. Вам просто нужно создать класс, который расширяет Application (public class Application_CrashReport расширяет приложение) и добавляет этот класс в файл файла манифеста и в этом классе просто переопределяет метод ниже. p >

  @Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
}

и добавьте MultiDex.install(это); в этом методе означает

  @Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

Примечание: - Не забудьте выполнить следующие шаги

Ответ 13

Это связано с MultiDex.

Шаги для решения:

  1. В gradle-> зависимости → (compile'com.android.support: multidex: 1.0.1 ') Добавьте это в зависимости

  2. В вашем классе приложения Project расширяет MultiDexApplication, как это (открытый класс MyApplication расширяет MultiDexApplication)

  3. Запустить и проверить

Ответ 14

Это немного поздно для тех, кто входит, но проверьте свои правила защиты! Я потратил много времени на это. Ваши правила Proguard могли бы изменить имена на важные файлы Firebase. Это действительно только доказывает проблему в производстве и мгновенном запуске :)

proguard-rules.pro

-keep class com.google.firebase.** { *; }
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.apache.**
-dontwarn org.w3c.dom.**

Ответ 15

Вы должны расширить свой класс приложения с помощью MultiDexApplication вместо Application.

Ответ 16

Эта проблема возникла, когда я переключился на Android Studio 3.4 с плагином Android Gradle 3.4.0. который работает с компилятором R8.

Плагин Android Gradle включает в себя дополнительные предопределенные файлы правил ProGuard, но рекомендуется использовать proguard-android-optimize.txt. Больше информации здесь.

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile(
          'proguard-android-optimize.txt'),
          // List additional ProGuard rules for the given build type here. By default,
          // Android Studio creates and includes an empty rules file for you (located
          // at the root directory of each module).
          'proguard-rules.pro'
    }
}

Ответ 17

Я столкнулся с той же проблемой, и я решил эту проблему, изменив версию fireabseStorage так же, как версию базы данных Firebase

 implementation 'com.google.firebase:firebase-core:16.0.8'
 implementation 'com.google.firebase:firebase-database:16.0.1'
 implementation 'com.google.firebase:firebase-storage:17.0.0'

в

 implementation 'com.google.firebase:firebase-core:16.0.8'
 implementation 'com.google.firebase:firebase-database:16.0.1'
 implementation 'com.google.firebase:firebase-storage:16.0.1'

Ответ 18

Для собственного приложения " java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" ошибка была java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" Это было только для устройств с версией Android <~ 4.4

Решил это, просто заменив Application в MainApplication.java на MultiDexApplication

ПРИМЕЧАНИЕ: import android.support.multidex.MultiDexApplication;

Ответ 19

Если у вас> 20 минут dsverversion, вам нужно использовать последнюю версию Firebase Auth, т.е.

implementation 'com.google.firebase:firebase-auth:18.1.0'

и нет необходимости настраивать мультидекс, если вам это не нужно.

Я столкнулся с этой проблемой, когда использовал 16.0.5 из помощника Firebase, но смог исправить ее, когда обновился до 18.1.0.

Ответ 20

Если вы используете Xamarin.Forms, возможно, вы захотите проверить Не нашли класс & comot; com.google.firebase.provider.FirebaseInitProvider "?, поскольку это фиксирует проблему с ошибкой dex с Google Firebase при запуске (не решена в настоящее время).

Я вернулся к использованию без сокращения в краткосрочной перспективе и планирую использовать ProGuard, пока R8 не станет более стабильным.

Ответ 21

добавить в корневой путь проекта google-services.json

dependencies {
compile 'com.android.support:support-v4:25.0.1'
**compile 'com.google.firebase:firebase-ads:9.0.2'**
compile files('libs/StartAppInApp-3.5.0.jar')
compile 'com.android.support:multidex:1.0.1'
  }
apply plugin: 'com.google.gms.google-services'