2016-10-03 6 views
69

Я получаю следующее исключение при запуске приложения.Не нашел класс "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 
} 

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

+0

Возможный дубликат http://stackoverflow.com/questions/37312103/unable-to-get-provider-com-google-firebase-provider-firebaseinitprovider –

+0

я уже попробовал все эти ответы. ничего не получается – WISHY

+0

Кажется, что проблема в вашем манифесте или google-services.json Убедитесь, что они верны. Можете ли вы опубликовать файл манифеста? –

ответ

79

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

+0

вы удивительны <3 спасибо, что вы спасли мой день <3 –

+6

Эй это исключение: вызвано: java.lang.ClassNotFoundException: не нашел класс «com.google.firebase.provider.FirebaseInitProvider» ** doesn't не имеют ничего общего с включением multidex, на самом деле, если вы видите вопросы build.gradle multiDexEnabled включен! ** – Jorgesys

+1

Нет этой ошибки от multidex, он просто не выполнил все шаги, так как вы не можете видеть его манифест или его основной класс. – AMAN77

-3

добавить в проект корневой путь 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' 
+0

подумайте над добавлением некоторой информации в ответ на ур, и этот код никому не поможет –

+0

Дополнительная информация ... – Mwongera

30

В build.gradle (Module: app), введите код, указанный ниже, в значение по умолчаниюConfig:

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" 
+0

Я, м, попробовал, если он будет работать Я буду голосовать и комментировать –

+0

Вы экономите свое время! –

14

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

  1. Добавьте этот код в ваш build.gradle (модуль: приложение) внутри defaultConfing:

    defaultConfig { 
        .... 
        .... 
        multiDexEnabled = true 
    } 
    
  2. Добавьте этот код в ваш build.gradle (модуль: приложение) внутри dependencies:

    dependencies { 
        compile 'com.android.support:multidex:1.0.1' 
        ..... 
        ..... 
    } 
    
  3. Open AndroidManifest.xml и в application:

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

И, наконец, я думаю, что вы должен иметь Android Support Repository скачано, в Дополнительно в Менеджер SDK.

3

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

4

Сначала добавьте следующее в сборку.Gradle (модуль: приложение) ---->

defaultConfig{ 
.. 
multiDexEnabled true 
.. 
} 

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

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

Тогда в AndroidManifest.xml написать следующее

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

Вот и все. Это определенно будет работать

+0

Ваш ответ - легкий шаг, чтобы понять, спасибо. –

+0

Добро пожаловать. –

40

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

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

+3

То же самое для меня. Это и послужило причиной проблемы - не multidex или каких-либо других ответов. – user3562927

+1

humm .. да, вы правы –

+1

Да, это сработало для меня тоже –

13

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

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 

    } 
} 
+0

плюс один для того, чтобы не падать за «андроид: имя» в манифесте – Chisko

+0

Самый простой и лучший ответ –

6

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

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

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

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

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

+1

Это идеальное решение –

+1

Это то, что решило его для меня. – icortesi

+0

Это должен быть принятый ответ. Спасибо Feizi .. –

0

1: Перейти к Gradle позволяет multiDexEnabled и добавить multidex библиотеки в зависимости.

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

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

2: Перейти в файл манифеста и писать андроид: имя = «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: Как писал андроид: имя = "MyApplication" Внутри Применение в файле манифеста. он даст вам ошибку, потому что вы не создали класс MyApplication. Создать класс MyApplication расширьте его классом «application» или просто нажмите on.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]

Будем надеяться, что это работает для вас.

0

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

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

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

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

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

1

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

шаги, чтобы решить:

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

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

  3. Run и проверить

0

Когда ваше приложение и библиотеки он ссылается более 65536 методы, вы обнаружите ошибку сборки, которая указывает на ваше приложение достигло предела архитектуры Android сборки

To avoid this limitation you have to configure your app for multidex

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

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

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

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

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

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

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

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

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.myapp"> 
    <application 
     android:name="android.support.multidex.MultiDexApplication" > 
     ... 
    </application> 
</manifest>  
  • Если вы о verride класса приложений, изменить его продлить MultiDexApplication (если это возможно) следующим образом:

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

public class MyApplication extends SomeOtherApplication { 
    @Override 
    protected void attachBaseContext(Context base) { 
    super.attachBaseContext(base); 
    MultiDex.install(this); 
    } 
} 
Смежные вопросы