प्रदाता com.google.firebase.provider.FirebaseInitProvider प्राप्त करने में असमर्थ


160

मैं नए क्रैश टूल का परीक्षण कर रहा हूं: https://firebase.google.com/docs/crash/

चरणों के माध्यम से जाने के बाद, ऐप लॉन्च होता है और यह कहते हुए क्रैश हो जाता है:

05-18 17:28:18.870 28743 28743 E AndroidRuntime: java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.IllegalStateException: Incorrect provider authority in manifest. Most likely due to a missing applicationId variable in application's build.gradle.
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.installProvider(ActivityThread.java:5156)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.-wrap1(ActivityThread.java)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:102)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:148)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:5417)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: Caused by: java.lang.IllegalStateException: Incorrect provider authority in manifest. Most likely due to a missing applicationId variable in application's build.gradle.
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at com.google.firebase.provider.FirebaseInitProvider.zza(Unknown Source)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.installProvider(ActivityThread.java:5153)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    ... 10 more

1
क्या आपके build.gradle में एक आवेदन-पत्र है?
इयान बार्बर

1
@IanBarber: अरे वाह, बिल्ड एडिट करते समय। मैंने इसे हटा दिया। मेरी गलती।
मैकरस

केवल stackoverflow.com/a/38224316/4663544 मेरे लिए काम किया
जेबा रा

8
प्रयास करें Android studio> Build>Clean Project
उज्जवल सिंह

मैंने अपने अनुप्रयोग वर्ग का विस्तार करके इसे तब फिक्स्ड किया, जब मल्टीडेक्स इनेबल्ड एप के अपडाउन डिफॉल्ट रूप में सही है।
हरमन

जवाबों:


145

1।

जोड़े applicationId आवेदन के build.gradle रहे हैं:

android {
    ...
    defaultConfig {
        applicationId "com.example.my.app"
        ...
    }
}

और स्वच्छ परियोजना की तुलना में -> निर्माण या पुनर्निर्माण परियोजना


2. यदि आपका minSdkVersion <= 20 ( https://developer.android.com/studio/build/multidex )

Multidex का सही उपयोग करें।

आवेदन का निर्माण

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

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

Manifest.xml

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

3।

यदि आप एक कस्टम एप्लिकेशन क्लास का उपयोग करते हैं

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

Manifest.xml

<application
    ...
    android:name="com.example.my.app.MyApplication" >
    ...

1
मुझे वही त्रुटि मिली और यह समाधान द्वारा तय किया गया है। मुझे पता नहीं क्यों, लेकिन यह काम करता है।
फूजी गोरो

इससे मेरे लिए दिन बच गया। एक एंड्रॉइड डिवाइस पर एक कॉर्डोवा ऐप चलाने की कोशिश करते समय मुझे त्रुटि मिली।
मानसिम

1
मैं अपने build.gradle पर एक ही समस्या और ApplicationId है। उस मामले में मैं क्या कर सकता हूं?
मारिया मर्सिडीज अल्वारेज़

@ekonstantinidis आपने इसे अपने कॉर्डोवा ऐप के लिए कैसे ठीक किया? क्या यह कहीं एक विन्यास में जोड़ा जा सकता है जो build.gradle उत्पन्न होने पर इसे सही ढंग से जोड़ता है? (के दौरान cordova platform add android)
ज़ैक

@ मुझे ऐसा नहीं लगता। मेरे दौड़ने के बाद मैंने उसे जोड़ा cordova platform add android। मुझे लगता है कि एक बार कॉर्डोबा अपडेट हो जाने के बाद यह ठीक हो जाएगा? Ps। मैं फायरबेस का इस्तेमाल बिल्कुल नहीं कर रहा हूं।
मानसिम

93

मैं एसडीके <22 के साथ उपकरणों में एक ही समस्या के साथ था, लेकिन मेरे लिए इसका कारण मल्टीडेक्स है, MultiDex.installयह attachBaseContextविधि में होना चाहिए ।

यदि आप मल्टीडेक्स का उपयोग कर रहे हैं, तो यह कोशिश करें:

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 

    }
}

एप्लिकेशन / build.gradle:

android {

    compileSdkVersion 24
    buildToolsVersion "24.0.2"

    defaultConfig {
        applicationId "com.test.app"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        multiDexEnabled true

    }

    dexOptions {
        javaMaxHeapSize "4g"
    }

....
}

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

        compile 'com.android.support:appcompat-v7:24.2.1'
        ...
        compile 'com.google.firebase:firebase-messaging:9.6.1'
        compile 'com.google.android.gms:play-services:9.6.1'
        compile 'com.android.support:multidex:1.0.1'

    }
...

4
यह काम करता है, लेकिन ऐसा करने के लिए एक विशेष वर्ग है जो एक फ़ंक्शन को ओवरराइड करने के बजाय और इसे मल्टीडेक्स एपेलेरेशन कहा जाता है, इसका जवाब नीचे देखें stackoverflow.com/questions/37312103/…
ग्रेगरीK

हाँ, यह मेरे लिए भी काम करता है, मैं हमेशा मल्टीडेक्स.स्टॉल (यह) ऑनक्रिएट () विधि के लिए धन्यवाद लिखता हूं
dara

मेरे मामले में मैंने अभी हाल ही में उपलब्ध संस्करण के लिए 'com.android.support:multidex:1.0.1' संकलन संकलित किया
अलेक्सी टिमोशेन्को

यह स्वीकृत उत्तर होना चाहिए। मैंने अन्य सभी उत्तरों की कोशिश की और Google और Firebase गाइड का अनुसरण कर रहा था लेकिन यह सही है, आप कमाल के आदमी हैं!
ब्लरवेयर

धन्यवाद, आप इसे कैसे पा सकते हैं? लेकिन मेरा सवाल यह है कि मेरी कोड लाइन्स ऐप 65000 से ऊपर नहीं है, मुझे इसका उपयोग मल्टीडेक्स क्यों करना चाहिए और मैं sdk> 22 पर काम क्यों करूं और यह sdk <22 पर काम नहीं करता है
milad salimi

75

स्वीकृत उत्तर से मेरी समस्या हल नहीं हुई।

यदि आप मल्टीडेक्स का उपयोग कर रहे हैं, तो आपका एप्लिकेशन MultiDexApplicationइसके बजाय विस्तारित होना चाहिए Application

MyApplication.java

public class MyApplication extends MultiDexApplication{
     ...
}

AndroidManifest.xml

<application
      android:name="your.package.name.MyApplication"
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      ...
      />

आशा करता हूँ की ये काम करेगा।


पूरी तरह से काम किया! बहुत बहुत धन्यवाद :)
समाधान आत्मा

3
आप इन बातों को कैसे जानते हैं ?? तुमसे किसने कहा??? मैंने एंड्रॉइड स्टूडियो 3 को अपडेट करने और "डीबग" एप्लिकेशन इंस्टॉल करने के बाद बस इस मुद्दे को रखना शुरू कर दिया। "रिलीज़" संस्करण ने अच्छी तरह से काम किया। अब, आपके समाधान के साथ "डीबग" संस्करण भी काम करता है। मैं बहुत खुश हूँ आप जैसे लोग मौजूद हैं !!
टन

इसका सही जवाब है
androidXP

इन सभी उत्तरों में, कोई भी वास्तव में यह नहीं बताता है कि मल्टीडेक्स को जोड़ने से वास्तव में समस्या को हल करने के लिए क्या होता है (ऐसे मुद्दे का सामना करने के लिए एक अव्यवस्थित रूप से यादृच्छिक बात)
आदित्य आनंद

36

यदि आपको भी यही समस्या है, लेकिन पहले से ही applicationIdसेट में है build.gradle, तो आप निम्नलिखित को भी आज़मा सकते हैं:

  • in Android Studio: Build>Clean Project
  • अन्य आईडीई में: स्वच्छ, पुनर्निर्माण, जो भी ...

3
और अगर आपके पास अभी भी समस्या है, तो निर्माण निर्देशिका को हटा दें और फिर से प्रयास करें। मैं तब तक अटका रहा जब तक मैंने ऐसा नहीं कर लिया :)
लॉरेंस मोरनी

केवल buildनिर्देशिका को हटाने से मेरे लिए काम किया गया। लगता है जैसे यह रेपो से मेरी आखिरी खींचतान द्वारा गड़बड़ कर दिया गया था।
सेवस्तन सवण्युक

17

प्री लॉलीपॉप डिवाइसों में भी मुझे यही समस्या थी। जिसे हल करने के लिए मैंने निम्न प्रकार किया। इस बीच मैं इस परियोजना में मल्टीडेक्स का उपयोग कर रहा था।

1. मॉड्यूल में build.gradle के लिए इसे जोड़ें: ऐप

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

2. इस निर्भरता को जोड़ें

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

मेनटेक्लेशन में 3.Then

public class MainApplication extends MultiDexApplication {

private static MainApplication mainApplication;

@Override
public void onCreate() {
    super.onCreate();
    mainApplication = this;
}

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


public static synchronized MainApplication getInstance() {
    return mainApplication;
}
}

4. मैनिफ़ेस्ट फ़ाइल में

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

यह मेरे लिए काम करता है। आशा है कि यह भी आपकी मदद करता है :)


4
आप सभी तीन काम नहीं करना चाहिए (मल्टीडेक्सएप्लेशन का विस्तार करें, एटैचेबेस कोटेक्स्ट को लागू करें और मेनिफेस्ट फाइल को बदलें) ताकि मल्टीडेक्स को सक्षम करने के लिए केवल एक ही पर्याप्त हो: डी। developer.android.com/studio/build/multidex.html
होसैन शाहदोस्त

यदि आपका minSdk 21 या अधिक है, तो आपको इसमें से कुछ भी नहीं करना चाहिए क्योंकि डॉक्स का कहना है कि यह पहले से ही डिफ़ॉल्ट रूप से सक्षम है। और फिर भी, यह समस्या मेरे लिए minSdk = 21 के साथ आ रही है, इसके लिए कोई समाधान?
आदित्य आनंद

15

आपको यकीन होना चाहिए

अपने प्रकटन में इस पंक्ति को जोड़ने के लिए

https://developer.android.com/studio/run/index.html#instant-run

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

मेरे लिए बहुत से साथ काम किया है मल्टीडेक्नेबल सच
ashishdhiman2007

7

पूरे प्ले सर्विसेज़ लाइब्रेरी को शामिल न करें, लेकिन जिस चीज़ की आपको ज़रूरत है, उसका उपयोग करें। अपने बिल्ड में लाइन का उपयोग करें। नवीनीकरण :

compile 'com.google.android.gms:play-services:9.6.1'

उदाहरण के लिए, Google Play Services API से उपयुक्त एक के साथ :

compile 'com.google.android.gms:play-services-gcm:9.6.1'

7

इसे अपने मॉड्यूल-स्तर build.gradle में जोड़ें:

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

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

यदि आप Applicationवर्ग को ओवरराइड करते हैं तो इसे MultiDexApplicationनिम्न से बढ़ाएँ :

YourApplicationClass extends MultiDexApplication

यदि आप इसे MultiDexApplicationकक्षा से विस्तारित नहीं कर सकते हैं तो attachBaseContext()निम्नलिखित विधि को ओवरराइड करें

protected void attachBaseContext(Context base) {
     super.attachBaseContext(context);
     Multidex.install(this);
  }

और पहले कुछ भी नहीं चला MultiDex.install(this) निष्पादित से ।

यदि आप Applicationकक्षा को ओवरराइड नहीं करते हैं तो अपनी घोषणा फ़ाइल को निम्नलिखित के रूप में संपादित करें:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    .......>
     <application
         ......
            android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
    ......
</manifest>

3

यह काम करना चाहिए:

चरण 1:

defaultConfig {
    applicationId "service.ingreens.com.gpsautoon"
    minSdkVersion 17
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

चरण 2:

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

चरण 3: दूसरी कक्षा लें

public class MyApplication extends MultiDexApplication {
}

चरण 4: प्रकट होने पर इस पंक्ति को जोड़ें

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

2

मेरे मामले में, इस समस्या को मॉड्यूल build.gradle में इस लाइन को जोड़कर हल किया गया था:

/ BOTTOM में इस जोड़ें

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

स्रोत


मुझे "प्लग इन आईडी 'com.google.gms.play-services' नहीं मिली।"
१३:३२ पर kaleemsagard

@kaleemsagard ने yout प्रोजेक्ट में इसे शामिल कियाbuild.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Borja

1

मेरे मामले में समस्या तब हुई जब हम AndroidX में चले गए। किसी कारण के लिए, ऐप मल्टीडेक्स.इनस्टॉल () को प्रतिबिंब के साथ बुला रहा था:

    final Class<?> clazz = Class.forName("android.support.multidex.MultiDex");
    final Method method = clazz.getDeclaredMethod("install", Context.class);
    method.invoke(null, this);

मैंने पैकेज को से बदल दिया android.support.multidex.MultiDexहै androidx.multidex.MultiDex। इसने काम कर दिया।


0

मैन्युअल रूप से पैकेज का नाम जोड़ने के बजाय build.gradle, आप इसे इस तरह से कर सकते हैं:

पहले इस लाइन को भीख मांगने के लिए जोड़ दें

import java.util.regex.Pattern

फिर इसे defaultConfig पर जोड़ें

android {
    ...
    defaultConfig {
        ...
        applicationId = doExtractStringFromManifest("package")
        ...
    }
    ...
}

और अंत में doExtractStringFromManifest मेथड जोड़ें

def doExtractStringFromManifest(name) {
     def manifestFile = file(android.sourceSets.main.manifest.srcFile)
     def pattern = Pattern.compile(name + "=\"(\\S+)\"")
     def matcher = pattern.matcher(manifestFile.getText())
     matcher.find()
     return matcher.group(1)
}

चूंकि उत्तर पर बहुत सारी कॉर्डोवा टिप्पणियां हैं, यदि आप कॉर्डोवा के साथ काम कर रहे हैं, तो आपको वास्तव में build.gradleअपने आप को संपादित नहीं करना चाहिए , यह कहने वाली टिप्पणी पर टिप्पणी है

// जनरेटेड फाइल! इसे मत बदलो!

इसलिए, यदि आप कॉर्डोवा का उपयोग कर रहे हैं, तो सबसे अच्छी बात यह है कि कॉर्डोवा-एंड्रॉइड 5.1.0 या अधिक से अधिक अपडेट करें जहां यह परिवर्तन पहले से मौजूद हैं।


0

मेरा था क्योंकि ग्रेड फ़ाइल में फायरबेस एसडीके एक गलत नंबर संस्करण पर सेट किया गया था।

मैंने ग्रैडल से फायरबैस डेब्स को हटा दिया और उन्हें फिर से उपयोग करके फिर से स्थापित किया Firebase Assistant


0

एंड्रॉइड स्टूडियो सेटिंग ( Ctrl+Alt+Sविंडोज़ में दबाकर ) पर जाएं, खोजें Instant Runऔर अनचेक करें Enable Instant Run

Instant Runआपके एप्लिकेशन को फिर से अक्षम और चलाने से, समस्या हल हो जाएगी।


0

मूल एप्लिकेशन पर प्रतिक्रिया के लिए, त्रुटि 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;


0

मैंने प्रोगार्ड फ़ाइल में निम्न कोड जोड़ा है।

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application

और इसने मेरे मामले में काम किया।


0

मेरे मामले में, मैं बिल्ड ग्रेडेल में दुर्घटनावश (या हटाए गए) फायरबेस कोर को जोड़ना भूल जाता हूं

implementation 'com.google.firebase:firebase-core:xx.x.x'

1
3 महीने बीत चुके हैं और अब यह पदावनत हो गया है: इस विषय को शामिल न करें! Source = firebase.google.com/support/release-notes/android (धन्यवाद: Google का धन्यवाद)
आदित्य आनंद

0

मुझे यह त्रुटि सिर्फ एपीआई कम वाले उपकरणों पर मिली है कि 21. मेरे मामले में, मुझे एक ऐसी परियोजना के साथ काम करना पड़ा है जिसमें multiDexEnabledविकल्प build.gradleपहले से ही निर्धारित था true। मैंने एपीके से डेक्स फ़ाइल की जाँच की और संदर्भित तरीकों की संख्या 64k से कम थी, इसलिए परियोजना को एक मल्टीडेक्स एक होने की आवश्यकता नहीं है, इसलिए मैंने इसे सेट multiDexEnabledकिया false। इस समाधान ने मेरे लिए काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.