ไม่พบคลาส“ com.google.firebase.provider.FirebaseInitProvider” ใช่หรือไม่


156

ฉันได้รับข้อยกเว้นด้านล่างในการเปิดตัวแอพ

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
}

วิธีแก้ปัญหา


สำเนาซ้ำซ้อนที่เป็นไปได้ของstackoverflow.com/questions/37312103/ …
Jay Rathod RJ

ฉันได้ลองคำตอบทั้งหมดแล้ว ไม่มีอะไรทำงาน
WISHY

ดูเหมือนว่ามีปัญหาในรายการหรือ google-services.json ของคุณให้แน่ใจว่าถูกต้อง คุณสามารถโพสต์ไฟล์ Manifest ของคุณได้หรือไม่?
Rushi M Thakker

6
คุณไม่ได้ทำการเปลี่ยนแปลงอย่างชัดแจ้งที่จำเป็นสำหรับการ MultiDex: android:name="android.support.multidex.MultiDexApplication"? หาก MultiDex มีการกำหนดค่าอย่างถูกต้องคุณจะเห็นข้อความ logcat ระหว่าง init I/MultiDex: install doneแอปเช่นนี้:
Bob Snyder

ตรวจสอบเปิดใช้งานการเปิดใช้งานทันทีหากใช่ปิดใช้งานการเรียกใช้ทันที
Prathap Badavath

คำตอบ:


145

ฉันมีข้อผิดพลาดเดียวกันและฉันแก้ไขด้วย MultiDex เช่นอธิบายไว้ในลิงค์นี้: https://developer.android.com/studio/build/multidex.html


บางครั้งมันไม่เพียงพอที่จะเปิดใช้งาน MultiDex

ถ้าชั้นใด ๆ ที่จำเป็นระหว่างการเริ่มต้นไม่ได้ระบุไว้ในไฟล์ DEX หลักแล้ว app ของคุณเกิดปัญหากับข้อผิดพลาด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

1
คุณน่าทึ่ง <3 ขอบคุณมากที่ช่วยชีวิตฉันไว้ <3
โมฮาเหม็ดเอเตฟ

24
เฮ้ข้อยกเว้นนี้เกิดจาก: java.lang.ClassNotFoundException: ไม่พบคลาส "com.google.firebase.provider.FirebaseInitProvider" ในชั้นเรียนไม่มีอะไรเกี่ยวข้องกับการเปิดใช้งาน multidex จริงๆแล้วถ้าคุณเห็นคำถาม build.gradle เปิดใช้งาน multiDexEnabled แล้ว!
Jorgesys

3
ไม่มีข้อผิดพลาดนี้มาจาก multidex เขาเพิ่งทำไม่ครบทุกขั้นตอนเนื่องจากคุณไม่เห็นรายการหรือชั้นเรียนหลักของเขา
AMAN77

3
สิ่งนี้ใช้ได้ผล ฉันเปิดการใช้งาน multidex ในไฟล์ gradle ของฉัน แต่ไม่มีส่วนใดของ Android Manifest!
krikara

3
ตรวจสอบให้แน่ใจว่าApplicationชั้นเรียนของคุณขยายออกMultiDexApplication()ไป สิ่งนี้หายไปในกรณีของฉัน
เนลสันอัล

86

ฉันก็ประสบปัญหาเดียวกันและในที่สุดก็แก้ไขได้โดยการปิดการใช้งานInstant Runในสตูดิโอ Android

การตั้งค่า→สร้างการดำเนินการปรับใช้→เรียกใช้ทันทีและยกเลิกการเลือกเปิดใช้งานเรียกใช้ทันที

ปรับปรุง:

ไม่มีตัวเลือกเรียกใช้ทันทีใน Android Studio 3.5+ ล่าสุด มันควรจะใช้ได้เฉพาะกับรุ่นที่เก่ากว่า


8
เหมือนกับฉัน. นี่เป็นสาเหตุของปัญหาไม่ใช่ multidex หรือคำตอบอื่น ๆ
user3562927

3
ดูเหมือนว่านี่เป็นปัญหากับ Android Studio 2.3 การปิดการใช้งานการรันแบบทันทีก็เหมาะกับฉันเช่นกัน แต่นี่ไม่ใช่วิธีแก้ปัญหาที่เหมาะสมที่สุด :(
Tharaka Devinda

1
ฉันรับช่วงสองโครงการจาก บริษัท อื่น รหัสฐานการกำหนดค่ารายการและการไล่ระดับเป็นจริงที่คาดหวังเดียวกันสำหรับสองรายการเล็ก ๆ น้อย ๆ โครงการหนึ่งสร้างและทำงานได้ดีโครงการอื่นไม่ทำงาน ปิดการใช้งานทันทีและพวกเขาทั้งสองทำงานทันที แปลก. นี่คือการใช้ Android Studio 2.3
joeblow23

3
ฉันประสบปัญหาเดียวกันนี้กับ AS 3.1 และโปรแกรมจำลองการทำงาน API 26 ก่อนที่ฉันจะไม่พบปัญหาใด ๆ กับ APIs 19-25 การปิดใช้งานการเรียกใช้ทันทีให้ฉันเรียกใช้แอปทันที ขอบคุณ
Marcin Jedynak

1
การปิดใช้งานการเรียกใช้ทันทีไม่สามารถแก้ปัญหานี้ให้ฉันได้
Alyoshak

49

ในไฟล์ build.gradle (โมดูล: แอป) ใส่รหัสด้านล่างลงใน defaultConfig:

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

และแทรกลงในการพึ่งพา:

implementation 'com.android.support:multidex:2.0.1'

จากนั้นเพิ่มรหัสลงในรายการ:

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

1
ฉันพยายามแล้วถ้ามันจะได้ผลฉันจะโหวตและแสดงความคิดเห็น
Kamil Ibadov

45

ฉันมีปัญหาเดียวกันใน (โครงการเครื่องเล่น YouTube) ... และต่อไปนี้แก้ไขปัญหาให้ฉัน:

  1. เพิ่มรหัสนี้ลงในbuild.gradle(โมดูล: แอพ) ภายในของคุณdefaultConfing:

    defaultConfig {
        ....
        ....
        multiDexEnabled = true
    }
  2. เพิ่มรหัสนี้ลงในbuild.gradle(โมดูล: แอพ) ภายในของคุณdependencies:

    dependencies {
        compile 'com.android.support:multidex:1.0.1'
        .....
        .....
    }
  3. เปิดAndroidManifest.xmlและภายในapplication:

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

    หรือหากคุณมีคลาสแอพของคุณให้ขยายจาก MultiDexApplication เช่น:

    public class MyApp extends MultiDexApplication {
    .....

และในที่สุดผมคิดว่าคุณควรจะมีการสนับสนุน Android Repositoryดาวน์โหลดในบริการพิเศษในSDK ผู้จัดการ


1
ฉันทำ "MultiDex.install (นี่);" แต่มันไม่ทำงาน การขยายคลาสแอปพลิเคชั่นด้วย MultiDexApplication ทำให้เกิดเคล็ดลับได้
Safeer

33

เพียงแทนที่วิธีต่อไปนี้ในคลาสแอปพลิเคชันของคุณ

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 

    }
}

บวกหนึ่งสำหรับการไม่ล้มสำหรับandroid:nameสิ่งของในรายการ
Chisko

คำตอบที่ง่ายและดีที่สุด
kader kabore

หากคุณใช้คลาสแอปพลิเคชันที่กำหนดเองนี่คือคำตอบ คำตอบอื่น ๆ จะไม่แก้ไขปัญหา
makkhay gurung

25

เมื่อแอปของคุณและไลบรารีที่อ้างถึงมีมากกว่า 65,536 วิธีคุณจะพบข้อผิดพลาดในการบิลด์ที่บ่งบอกว่าแอปของคุณมีข้อ จำกัด ของสถาปัตยกรรมการสร้าง Android

เพื่อหลีกเลี่ยงข้อ จำกัด นี้คุณจะต้องกำหนดค่าแอพของคุณสำหรับ Multidex

หากminSdkVersionของคุณถูกตั้งค่าเป็น21หรือสูงกว่าสิ่งที่คุณต้องทำคือตั้งค่า multiDexEnabled เป็น true ในไฟล์ build.gradle ระดับโมดูลของคุณดังแสดงที่นี่:

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

อื่นถ้า minSdkVersion ของคุณถูกตั้งค่าเป็น 20 หรือต่ำกว่าแล้วคุณจะต้องใช้ห้องสมุดสนับสนุน multidex ดังนี้

1.แก้ไขไฟล์ build.gradle ระดับโมดูลเพื่อเปิดใช้งาน multidex และเพิ่มไลบรารี multidex เป็นการอ้างอิงดังที่แสดงที่นี่:

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

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

2.ขึ้นอยู่กับว่าคุณแทนที่คลาส Application หรือไม่ให้ทำหนึ่งในสิ่งต่อไปนี้:

  • หากคุณไม่ได้แทนที่คลาสแอปพลิเคชันให้แก้ไขไฟล์รายการเพื่อตั้งค่า android: ชื่อในแท็กดังต่อไปนี้:

    <application
        android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
  • อื่นหากคุณแทนที่คลาสแอพพลิเคชั่นให้เปลี่ยนเป็นขยาย MultiDexApplication (ถ้าเป็นไปได้) ดังนี้:

   public class MyApplication extends MultiDexApplication { ... }
  • อื่น ๆที่คุณทำแทนที่ระดับแอพลิเคชัน แต่มันเป็นไปไม่ได้ที่จะเปลี่ยนระดับฐานแล้วคุณแทนสามารถแทนที่ attachBaseContext () วิธีการและเรียก MultiDex.install (นี้) เพื่อให้สามารถ multidex:

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

เหตุใดแอปพลิเคชันจึงต้องขยาย MultiDexApplication
เจสัน

1
MultiDexApplication เป็นคลาสไลบรารีที่สนับสนุน มันใช้คลาสแอปพลิเคชันและแทนที่ชื่อเมธอด attachBaseContext เพื่อทำงานสำหรับการลงทะเบียน MultiDex คุณไม่จำเป็นต้องขยายคลาสนี้หากคุณแทนที่เมธอด attachBaseContext
Sokmean Pon

1
นี้แก้ไขให้ฉันในปี 2019 กับ React Native แต่ไม่มีการนำเข้า 2 รายการใน MainApplication.java: import android.content.Context;และimport android.support.multidex.MultiDex;
xaphod

1
คำตอบของคุณช่วยให้ฉันทำให้แอปของฉันกลับเข้ากันได้
Alok Vishwakarma

18

การเปิดใช้งานmultidexไม่ใช่วิธีแก้ปัญหาที่ดีเพราะmultidexมีการใช้งานอื่นใน Android ดูคำตอบนี้ว่า multidex

วิธีการแก้ปัญหาคือการปิดการใช้งานทันทีที่ @Shylendra Madda กล่าว

การตั้งค่า→สร้างการดำเนินการปรับใช้→เรียกใช้ทันทีและยกเลิกการเลือกเปิดใช้งานเรียกใช้ทันที

ผมคิดว่าเหตุผลของปัญหานี้คือเมื่อวิ่งทันทีถูกเปิดใช้งาน Android สตูดิโอไม่ได้ใส่ห้องสมุดเช่นfirebaseเข้าไปใน apk สร้างขึ้นเพื่อการลดเวลาในการสร้างโครงการเพราะfirebase ห้องสมุดและห้องสมุดอื่น ๆ เช่นmapsและคนอื่น ๆ ที่เป็นที่มีอยู่ในการให้บริการการเล่นและการเล่นการบริการติดตั้ง บนอุปกรณ์ android ดังนั้นหากเปิดใช้การเรียกใช้ทันทีไม่จำเป็นต้องใส่ไว้ใน apk ที่สร้างขึ้น

ดังนั้นเมื่อคุณแยก apk และติดตั้งลงในอุปกรณ์อื่นคุณจะเห็นข้อยกเว้นนี้


1
นี่เป็นทางออกที่สมบูรณ์แบบ
Ghanshyam Bagul

การปิดใช้งานการเรียกใช้ทันทีไม่สามารถแก้ปัญหาให้ฉันได้
Alyoshak

ใน Android Studio 3.5.1 ไม่มีรายการการเรียกใช้ทันทีในส่วน Build, Execution, Deployment
Vergiliy

@Vergiliy พวกเขาแทนที่ด้วยการเปลี่ยนแปลงใช้ดูโพสต์บล็อกปล่อยandroid-developers.googleblog.com/2019/08/…สำหรับข้อมูลเพิ่มเติมและ docs developer.android.com/studio/run#apply-changesสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสมัคร การเปลี่ยนแปลง
Edalat Feizi

14

ฉันยังประสบปัญหาเดียวกันหลังจากลองวิธีแก้ปัญหาทั้งหมดฉันพบวิธีแก้ไขปัญหาด้านล่าง

หากคุณใช้กฎ proguard ให้เพิ่มบรรทัดด้านล่างในกฎ ProGuard

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

และมันแก้ปัญหาของฉัน


@gunavant patel ครับกรุณาช่วยบอกฉันวิธีการเพิ่มเข้าไปใน proguard โปรด
Gowthaman M

1
@ gunavant patel ฉันคิดว่านี่จะช่วยแก้ปัญหาของฉัน ... คุณช่วยกรุณาโพสต์โค้ดตัวอย่างที่จะเก็บสายนี้ไว้-keep class com.google.firebase.provider.FirebaseInitProvider
Gowthaman M

@GowthamanM ก่อนอื่นให้ตรวจสอบว่าคุณเปิดใช้งาน proguard ในไฟล์ app / build.gradle หากเปิดใช้งานคุณจะพบไฟล์ proguard-rules ใน app / proguard-rules.pro ในไฟล์ดังกล่าวเพิ่มบรรทัดด้านบน หากคุณไม่ได้เปิดใช้งาน proguard ก็ไม่ได้เป็นตัวคุณ
Gunavant Patel

buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }วิธีเปิดใช้งานโปรดบอกฉันด้วย
Gowthaman M

หากคุณไม่ได้เปิดใช้งาน proguard ปัญหาจะแตกต่างกัน แต่ฉันจะแสดงให้คุณเห็นว่าเปิดใช้งานอย่างไร เพิ่ม "minifyEnabled true" ในรีลีสหรือถ้าคุณต้องการเปิดใช้งานสำหรับการดีบักแล้วยังเพิ่มในประเภทการแก้ปัญหา
Gunavant Patel

8

1:ไปที่ gradle เปิดใช้งาน multiDexEnabled และเพิ่มไลบรารี multidex ในการอ้างอิง

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

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

2:ไปที่ไฟล์ Manifest และเขียน 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" Inside Application ที่ไฟล์ Manifest มันจะทำให้คุณมีข้อผิดพลาดเพราะคุณไม่ได้สร้างคลาส MyApplication สร้างคลาส MyApplication ขยายโดยคลาส "แอปพลิเคชัน" หรือเพียงคลิกที่ 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]

หวังว่ามันจะเหมาะกับคุณ


7

ขั้นแรกให้เพิ่มสิ่งต่อไปนี้ใน 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>

แค่นั้นแหละ. มันจะทำงานได้อย่างแน่นอน


6

หากคุณใช้ MultiDex ใน App Gradle ของคุณให้เปลี่ยนขยายแอปพลิเคชันเพื่อขยาย MultiDexApplicationในคลาสแอปพลิเคชันของคุณ มันจะทำงานได้อย่างท้าทาย


4

ฉันมีปัญหาเดียวกันและแก้ไขได้เพียงเพิ่มรหัสถ้าคุณได้รับปัญหานี้หมายความว่าคุณได้ทำตามขั้นตอนทั้งหมดที่จำเป็นต้องใช้ Firebase แล้ว คุณเพียงแค่ต้องสร้างคลาสที่ขยาย Application (public class Application_CrashReport ขยาย Application)และเพิ่มคลาสนี้ในไฟล์ mainifestและในคลาสนั้นก็แทนที่เมธอดด้านล่าง

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

และเพิ่ม MultiDex.install (สิ่งนี้); ในวิธีการนั้นหมายถึง

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

หมายเหตุ : - อย่าลืมทำตามขั้นตอนด้านบน


2

นี่คือเนื่องจาก MultiDex

ขั้นตอนในการแก้ไข:

  1. ใน gradle-> การพึ่งพา -> (compile'com.android.support: multidex: 1.0.1 ') เพิ่มสิ่งนี้ในการพึ่งพา

  2. ในคลาสแอปพลิเคชันโครงการของคุณขยาย MultiDexApplication เช่นนี้ (คลาสสาธารณะ MyApplication ขยาย MultiDexApplication)

  3. เรียกใช้และตรวจสอบ


2

มันค่อนข้างช้าสำหรับผู้ที่เข้ามา แต่ให้ตรวจสอบกฎของผู้พิทักษ์ของคุณ! ฉันเสียเวลาไปมากกับเรื่องนี้ กฎ 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.**

นี่เป็นการหลอกลวงทำให้ multidex ไม่ได้ทำอะไรนอกจากเสียเวลา!
Magnus W

2

ดังที่ได้กล่าวไว้ก่อนหน้านี้เป็นปัญหากับmultidex: คุณควรเพิ่มการดำเนินการที่คุณและbuild.gradle MainApplication.javaแต่สิ่งที่คุณเพิ่มขึ้นอยู่กับว่าคุณรองรับ AndroidX หรือไม่ นี่คือสิ่งที่คุณต้องการในการแก้ปัญหานี้:

  1. หากคุณรองรับ AndroidX

ใส่บรรทัดของรหัสเหล่านี้ลงในbuild.gradle(android / app / build.gradle) ของคุณ:

defaultConfig {
  applicationId "com.your.application"
  versionCode 1
  versionName "1.0"
  ...
  multiDexEnabled true // <-- THIS LINE
}
...
...
dependencies {
  ...
  implementation "androidx.multidex:multidex:2.0.1" // <-- THIS LINE
  ...
}

ใส่บรรทัดเหล่านี้ลงในMainApplication.java(android / app / src / main / java /.../ MainApplication.java):

package com.your.package;

import androidx.multidex.MultiDexApplication; // <-- THIS LINE
...
...
public class MainApplication extends MultiDexApplication { ... } // <-- THIS LINE
  1. หากคุณไม่รองรับ AndroidX

ใส่บรรทัดของรหัสเหล่านี้ลงในbuild.gradle(android / app / build.gradle) ของคุณ:

defaultConfig {
  applicationId "com.your.application"
  versionCode 1
  versionName "1.0"
  ...
  multiDexEnabled true // <-- THIS LINE
}
...
...
dependencies {
  ...
  implementation "com.android.support:multidex:1.0.3" // <-- THIS LINE
  ...
}

ใส่บรรทัดเหล่านี้ลงในMainApplication.java(android / app / src / main / java /.../ MainApplication.java):

package com.your.package;

import android.support.multidex.MultiDex;; // <-- THIS LINE
...
...
public class MainApplication extends MultiDexApplication { ... } // <-- THIS LINE


0

ปัญหานี้เกิดขึ้นเมื่อฉันเปลี่ยนเป็น Android Studio 3.4 ด้วยปลั๊กอิน Android Gradle 3.4.0 ซึ่งทำงานกับคอมไพเลอร์ R8

ปลั๊กอิน Android Gradle รวมถึงการที่กำหนดไว้ล่วงหน้า ProGuard ไฟล์กฎระเบียบเพิ่มเติม แต่ก็ขอแนะนำให้คุณใช้Proguard-หุ่นยนต์ 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'
    }
}

0

ฉันประสบปัญหาเดียวกันและฉันแก้ไขปัญหานี้ด้วยการเปลี่ยนเวอร์ชั่น 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'

0

หากคุณมี> 20 minsdkversion คุณจะต้องใช้เวอร์ชันล่าสุดของ Firebase Auth เช่น

การใช้งาน 'com.google.firebase: firebase-auth: 18.1.0'

และไม่จำเป็นต้องตั้งค่า multi-dex หากคุณไม่ต้องการมัน

ฉันพบปัญหานี้เมื่อฉันใช้ 16.0.5 จากตัวช่วย Firebase แต่สามารถแก้ไขได้เมื่อฉันอัปเดตเป็น 18.1.0


0

หากคุณใช้ Xamarin.Forms คุณอาจต้องการตรวจสอบไม่พบคลาส "com.google.firebase.provider.FirebaseInitProvider" หรือไม่? เช่นนี้จับปัญหากับข้อผิดพลาด dex กับ google firebase เมื่อเริ่มต้น (ยังไม่ได้แก้ไขในขณะนี้)

ฉันกลับไปใช้โดยไม่หดตัวในระยะสั้นและวางแผนที่จะใช้ ProGuard จนกว่า R8 จะมีเสถียรภาพมากขึ้น


-6

เพิ่มในเส้นทางของโครงการราก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'

ลองเพิ่มข้อมูลลงในคำตอบของคุณและโค้ดนี้จะไม่ช่วยใครเลย
Ashu Kumar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.