android - क्या "com.google.firebase.provider.FirebaseInitProvider" वर्ग नहीं मिला?




(13)

जब आपका ऐप और लाइब्रेरीज़ यह संदर्भ 65,536 से अधिक हो जाते हैं, तो आप एक बिल्ड त्रुटि का सामना करते हैं जो इंगित करता है कि आपका ऐप एंड्रॉइड सिस्टम आर्किटेक्चर की सीमा तक पहुंच गया है

https://developer.android.com/studio/build/multidex.html

यदि आपका minSdkVersion 21 या अधिक पर सेट है, तो आपको बस इतना करना होगा कि आपके मॉड्यूल-स्तर build.gradle फ़ाइल में सत्य के लिए मल्टीडेक्सिबल सेट किया जाए, जैसा कि यहां दिखाया गया है:

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

हालाँकि , यदि आपका minSdkVersion 20 या उससे कम पर सेट है, तो आपको निम्नानुसार मल्टीडेक्स समर्थन लाइब्रेरी का उपयोग करना होगा:

1। मल्टीडेक्स को सक्षम करने के लिए मॉड्यूल-लेवल बिल्ड.ग्रेड फ़ाइल को संशोधित करें और एक निर्भरता के रूप में मल्टीडेक्स लाइब्रेरी को जोड़ने के लिए, जैसा कि यहां दिखाया गया है:

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

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

2। इस पर निर्भर करते हुए कि क्या आप अनुप्रयोग वर्ग को ओवरराइड करते हैं, निम्न में से एक कार्य करें:

  • यदि आप एप्लिकेशन क्लास को ओवरराइड नहीं करते हैं, तो एंड्रॉइड सेट करने के लिए अपनी मैनिफ़ेस्ट फ़ाइल संपादित करें: टैग में नाम निम्नानुसार है:

    <application
        android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
  • यदि आप अनुप्रयोग वर्ग को ओवरराइड करते हैं, तो इसे मल्टीडेक्सएप्लिकेशन (यदि संभव हो तो) के विस्तार के लिए बदल दें:

public class MyApplication extends MultiDexApplication { ... }
  • या यदि आप एप्लिकेशन क्लास को ओवरराइड करते हैं, लेकिन बेस क्लास को बदलना संभव नहीं है, तो आप इसके बजाय संलग्नक को बंद कर सकते हैं () विधि और मल्टीडेक्स को सक्षम करने के लिए MultiDex.install (यह) कॉल करें:

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

मुझे ऐप लॉन्च पर नीचे अपवाद मिल रहा है।

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) 

यहाँ app स्तर 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'

यह मेरा एप्लीकेशन लेवल बिल्ड.ग्रेड है

// 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
}

मसला कैसे हल करें?


आपको अनुप्रयोग के बजाय अपने अनुप्रयोग वर्ग को MultiDexApplication साथ विस्तारित करना चाहिए।


नीचे दिए गए समाधान को खोजने के लिए मैंने सभी समाधानों की कोशिश करने के बाद एक ही मुद्दे का सामना किया।

यदि आपने प्रोलगार्ड नियम लागू किया है, तो प्रोगार्ड नियमों में नीचे की पंक्ति जोड़ें

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

और इसकी समस्या का समाधान।


प्रोजेक्ट रूट पथ में जोड़ें 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'

बिल्ड.ग्रेडल (मॉड्यूल: ऐप) फ़ाइल में, डिफ़ॉल्ट कोड नीचे दिए गए कोड को डालें:

  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"

मेरे (YouTube प्लेयर प्रोजेक्ट) में भी मुझे यही समस्या थी ... और निम्नलिखित ने मेरे लिए समस्या हल की:

  1. इस कोड को अपने build.gradle (मॉड्यूल: ऐप) में defaultConfing

    defaultConfig {
        ....
        ....
        multiDexEnabled = true
    }
  2. dependencies अंदर अपने build.gradle (मॉड्यूल: एप्लिकेशन) में इस कोड को जोड़ें:

    dependencies {
        compile 'com.android.support:multidex:1.0.1'
        .....
        .....
    }
  3. AndroidManifest.xml खोलें और application भीतर:

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

    या यदि आपके पास अपना ऐप वर्ग है, तो इसे मल्टीडेक्स एप्लाइंसे से बढ़ाएं:

    public class MyApp extends MultiDexApplication {
    .....

और अंत में, मुझे लगता है कि आपको एसडीके प्रबंधक में एक्स्ट्रा में एंड्रॉइड सपोर्ट रिपॉजिटरी डाउनलोड करनी चाहिए।


मैं एक ही समस्या का सामना कर रहा था और मैंने इस मुद्दे को फायरबेस डेटाबेस संस्करण के रूप में फायरबैसेस्टोरेज संस्करण को बदलकर हल किया

 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'

मैंने भी उसी समस्या का सामना किया और अंत में एंड्रॉइड स्टूडियो में Instant Run को अक्षम करके इसे हल किया।

सेटिंग्स → बिल्ड, एक्ज़ीक्यूशन, परिनियोजन → इंस्टेंट रन और अनचेक करें इंस्टेंट रन सक्षम करें


यदि आपके पास> 20 minsdkversion है, तो आपको नवीनतम Firebase Auth संस्करण का उपयोग करने की आवश्यकता है

कार्यान्वयन 'com.google.firebase: firebase-schem: 18.1.0'

और अगर आपको वास्तव में इसकी आवश्यकता नहीं है तो मल्टी-डेक्स को सेटअप करने की आवश्यकता नहीं है।

मैं इस मुद्दे का सामना करना पड़ा जब मैंने फायरबेस हेल्पर से 16.0.5 का उपयोग किया है, लेकिन 18.1.0 में अपडेट होने पर मैं इसे ठीक करने में सक्षम था।


यह मल्टीडेक्स के कारण है।

हल करने के लिए कदम:

  1. Gradle-> निर्भरता में -> (compile'com.android.support: multidex: 1.0.1 ') निर्भरता में इसे जोड़ें

  2. आपके प्रोजेक्ट अनुप्रयोग में क्लास इस तरह MultiDexApplication बढ़ाता है (सार्वजनिक वर्ग MyApplication MultiDexApplication बढ़ाता है)

  3. भागो और जांच करो


सबसे पहले build.gradle (मॉड्यूल: एप्लिकेशन) में निम्नलिखित जोड़ें ---->

defaultConfig{
..
multiDexEnabled true
..
}

फिर उसी फ़ाइल में निम्नलिखित जोड़ें

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

फिर AndroidManifest.xml में निम्नलिखित लिखें

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

बस। यह निश्चित रूप से काम करेगा


multidex को सक्षम multidex एक अच्छा समाधान नहीं है क्योंकि multidex का multidex में एक और उपयोग है यह उत्तर देखें कि मल्टीडेक्स क्या है

समाधान @Shylendra Madda ने कहा कि तुरंत चलाने को अक्षम कर रहा है

सेटिंग्स → बिल्ड, एक्ज़ीक्यूशन, परिनियोजन → इंस्टेंट रन और अनचेक करें इंस्टेंट रन सक्षम करें

मुझे लगता है कि इस समस्या का कारण यह है कि जब तत्काल रन सक्षम किया जाता है, तो एंड्रॉइड स्टूडियो firebase जैसी लाइब्रेरियों को उत्पन्न नहीं करता है। प्रोजेक्ट बिल्ड टाइम को कम करने के लिए firebase उपयोग करें क्योंकि firebase लाइब्रेरी और अन्य लाइब्रेरी जैसे maps और others प्ले सर्विसेज और प्ले में मौजूद हैं सेवाएं एंड्रॉइड डिवाइस पर इंस्टॉल की जाती हैं, ताकि इंस्टेंट रन सक्षम होने पर उन्हें बिल्ड टाइम तेज करने के लिए जेनरेट किए गए एपीके में डालने की जरूरत न पड़े।

इसलिए जब आप एपीके निकालें और इसे किसी अन्य डिवाइस पर स्थापित करें तो आपको यह अपवाद दिखाई देगा


मेरे पास एक ही मुद्दा था और हल किया गया कोड का एक टुकड़ा जोड़ें , यदि आपको यह मुद्दा मिल रहा है तो इसका मतलब है कि आपने पहले ही सभी चरणों को पूरा कर लिया है जिसमें फायरबेस का उपयोग करने की आवश्यकता है। आपको बस एक वर्ग बनाने की ज़रूरत है जो अनुप्रयोग (सार्वजनिक वर्ग Application_CrashReport अनुप्रयोग का विस्तार करता है) का विस्तार करता है और इस वर्ग को मुख्य फ़ाइल में जोड़ता है और उस वर्ग में बस नीचे की विधि को ओवरराइड करता है

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

और MultiDex.install (यह) जोड़ें; उस विधि में इसका मतलब है

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

नोट : - उपरोक्त चरणों का पालन करना न भूलें





firebase