Không thể nhận nhà cung cấp com.google.firebase.provider.FirebaseInitProvider


160

Tôi đang thử nghiệm công cụ Crash mới: https://firebase.google.com/docs/crash/

Sau khi trải qua các bước, ứng dụng khởi chạy và nó gặp sự cố:

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
Bạn có ứng dụngID trong build.gradle của mình không?
Ian Barber

1
@IanBarber: Oh wow, trong khi chỉnh sửa build.gradle tôi đã xóa nó. Lỗi của tôi.
Macude

chỉ stackoverflow.com/a/38224316/4663544 làm việc cho tôi
Jeba Ra

8
Hãy thử Android studio> Build>Clean Project
Ujjwal Singh

Tôi đã sửa nó bằng cách làm cho lớp ứng dụng của tôi mở rộng MultiDexApplication khi multiDexEnables là đúng trong ứng dụng mặc định của ứng dụng.
Herman

Câu trả lời:


145

1.

Thêm applicationId vào build.gradle của ứng dụng:

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

Và hơn dự án sạch -> Xây dựng hoặc xây dựng lại dự án


2. Nếu minSdkVersion của bạn <= 20 ( https://developer.android.com/studio/build/multidex )

Sử dụng Multidex một cách chính xác.

ứng dụng build.gradle

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

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

tệp kê khai

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

3.

Nếu bạn sử dụng lớp Ứng dụng tùy chỉnh

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

tệp kê khai

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

1
Tôi đã nhận được cùng một lỗi và nó đã được sửa bởi giải pháp. Tôi không biết tại sao, nhưng nó hoạt động.
FUJI Goro

Điều này tiết kiệm trong ngày cho tôi. Có lỗi trong khi tôi đang cố chạy ứng dụng Cordova cho thiết bị Android.
manosim

1
Tôi có cùng một vấn đề và applicationId trên build.gradle của tôi. Tôi có thể làm gì trong trường hợp đó?
Maria Mercedes Wyss Alvarez

@ekonstantinidis Bạn đã sửa nó cho ứng dụng cordova của bạn như thế nào? Nó có thể được thêm vào một cấu hình ở đâu đó để thêm chính xác khi build.gradle được tạo không? (Trong cordova platform add android)?
Zach

@Zach Tôi không nghĩ vậy. Tôi đã thêm nó sau khi tôi chạy cordova platform add android. Tôi đoán nó sẽ được sửa chữa khi cordova được cập nhật? Thi thiên Tôi hoàn toàn không sử dụng Firebase.
manosim

93

Tôi đã gặp vấn đề tương tự trong các thiết bị có SDK <22, nhưng đối với tôi lý do là MultiDex, MultiDex.installphải có trong attachBaseContextphương thức.

Nếu bạn đang sử dụng MultiDex, hãy thử điều này:

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 

    }
}

ứng dụng / 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
Nó hoạt động, nhưng có một lớp đặc biệt để làm điều đó thay vì ghi đè một hàm và nó được gọi là MultiDexApplication, xem câu trả lời bên dưới stackoverflow.com/questions/37312103/
trộm

Vâng, nó cũng hiệu quả với tôi, tôi luôn viết MultiDex.install (cái này) bên trong phương thức onCreate () cảm ơn anh chàng
dara

trong trường hợp của tôi, tôi vừa cập nhật biên dịch 'com.android.support:multidex:1.0.1' lên phiên bản có sẵn cuối cùng
Aleksey Timoshchenko

Đây phải là câu trả lời được chấp nhận. Tôi đã thử tất cả các câu trả lời khác và đang theo hướng dẫn của Google và Firebase nhưng đây là câu trả lời đúng, bạn là người đàn ông tuyệt vời!
blucare 28/03/19

Cảm ơn, làm thế nào bạn có thể tìm thấy nó? nhưng câu hỏi của tôi là ứng dụng dòng mã của tôi không cao hơn 65000 tại sao tôi nên sử dụng multudex và tại sao tôi làm việc trên sdk> 22 và nó không hoạt động trên sdk <22
milad salimi

75

Câu trả lời được chấp nhận không giải quyết được vấn đề của tôi.

Nếu bạn đang sử dụng Multidex, Ứng dụng của bạn sẽ mở rộng MultiDexApplicationthay vì 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"
      ...
      />

Hy vọng nó giúp.


Làm việc hoàn hảo! Cảm ơn rất nhiều :)
Giải pháp Spirit

3
Làm thế nào để bạn biết những điều này ?? Ai nói với bạn??? Tôi mới bắt đầu gặp sự cố này sau khi cập nhật lên Android Studio 3 và cài đặt ứng dụng "gỡ lỗi". Phiên bản "Phát hành" hoạt động tốt. Bây giờ, với giải pháp của bạn cũng hoạt động phiên bản "Gỡ lỗi". Tôi rất hạnh phúc những người như bạn tồn tại !!
Tôn

Đó là câu trả lời hoàn hảo
androidXP

Trong tất cả các câu trả lời này, không có câu trả lời nào thực sự bổ sung multidex thực sự làm gì để giải quyết vấn đề (một điều ngẫu nhiên khó hiểu phải đối mặt với vấn đề như vậy)
Aditya Anand

36

Nếu bạn gặp vấn đề tương tự nhưng đã applicationIdcài đặt sẵn build.gradle, bạn cũng có thể thử các cách sau:

  • trong Studio Android: Build>Clean Project
  • trong các IDE khác: Clean, Rebuild, bất cứ điều gì ...

3
Và nếu bạn vẫn gặp sự cố, hãy xóa thư mục bản dựng và thử lại. Tôi đã bị mắc kẹt cho đến khi tôi làm điều đó :)
Laurence Moroney

Chỉ xóa buildthư mục làm việc cho tôi. Có vẻ như nó đã bị rối tung bởi lần kéo cuối cùng của tôi từ repo.
Sevastyan Savanyuk

17

Tôi gặp vấn đề tương tự trong các thiết bị Pre Lollipop. Để giải quyết mà tôi đã làm như sau. Trong khi đó, tôi đã sử dụng multiDex trong dự án.

1. thêm phần này cho build.gradle trong mô-đun: ứng dụng

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

2. thêm phụ thuộc này

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

3.Sau đó trong Ứng dụng chính

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.Trong tệp kê khai

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

Điều này làm việc cho tôi. Hy vọng điều này cũng giúp bạn :)


4
Bạn không nên thực hiện cả ba công việc (mở rộng MultiDexApplication, triển khai attacheBaseContext và thay đổi tệp tin đơn giản) để cho phép multidex chỉ có một là đủ: D. developer.android.com/studio/build/multidex.html
Hossein Shahdoost

Nếu minSdk của bạn từ 21 trở lên, bạn không cần phải thực hiện bất kỳ thao tác nào như tài liệu nói rằng nó đã được bật theo mặc định. Chưa hết, vấn đề này đang đến với tôi với minSdk = 21, có giải pháp nào cho việc này không?
Aditya Anand

15

bạn nên chắc chắn

để thêm dòng này vào bảng kê khai của bạn

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>

Làm việc cho tôi cũng vậy với multiDexEnables true
ashishdhiman2007 18/03/17

7

Không bao gồm toàn bộ thư viện dịch vụ chơi mà sử dụng thư viện bạn cần. Đặt lại dòng trong build.gradle của bạn :

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

với một API thích hợp từ API Dịch vụ của Google Play , ví dụ như:

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

7

Thêm phần này vào build.gradle cấp mô-đun của bạn:

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

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

Nếu bạn ghi đè Applicationlớp thì mở rộng nó từ MultiDexApplication:

YourApplicationClass extends MultiDexApplication

Nếu bạn không thể mở rộng nó từ MultiDexApplicationlớp thì ghi đè attachBaseContext()phương thức như sau:

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

Và không chạy bất cứ điều gì trước khi MultiDex.install(this)được thực thi.

Nếu bạn không ghi đè Applicationlớp, chỉ cần chỉnh sửa tệp kê khai của bạn như sau:

<?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

Điều này sẽ hoạt động:

Bước 1:

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

Bước 2:

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

Bước 3: Tham gia lớp học khác

public class MyApplication extends MultiDexApplication {
}

Bước 4: Thêm dòng này vào bảng kê khai

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

2

Trong trường hợp của tôi, vấn đề đã được giải quyết bằng cách thêm dòng này vào mô-đun build.gradle:

// THÊM NÀY TẠI BOTTOM

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

Nguồn


Tôi đã nhận được "Plugin có id 'com.google.gms.play-services'."
cải xoăn

@kaleemsagard đưa điều này vào dự án youtbuild.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Borja

1

Trong trường hợp của tôi, sự cố đã xảy ra sau khi chúng tôi di chuyển sang AndroidX. Vì một số lý do, ứng dụng đã gọi MultiDex.install () với sự phản ánh:

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

Tôi đổi gói từ android.support.multidex.MultiDexsang androidx.multidex.MultiDex. Nó đã làm việc.


0

Thay vì tự thêm tên gói trên build.gradle , bạn có thể thực hiện theo cách này:

đầu tiên thêm dòng này tại ăn xin

import java.util.regex.Pattern

Sau đó thêm cái này vào defaultConfig

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

Và cuối cùng thêm phương thức 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)
}

Vì có rất nhiều bình luận của Cordova về câu trả lời, nếu bạn đang làm việc với Cordova, bạn không nên thực sự chỉnh sửa build.gradlechính mình, nó có một bình luận tại lời cầu xin nói rằng

// TẬP TIN TẠO! KHÔNG CHỈNH SỬA!

Vì vậy, nếu bạn đang sử dụng Cordova, điều tốt nhất bạn có thể làm là cập nhật lên cordova-android 5.1.0 hoặc cao hơn khi có những thay đổi này.


0

Của tôi là do SDK Firebase trong tệp Gradle được đặt thành một phiên bản số sai.

Tôi đã xóa các bản sửa lỗi Firebase khỏi Gradle và cài đặt lại chúng bằng cách sử dụng Firebase Assistant


0

Chuyển đến cài đặt studio android (bằng cách nhấn Ctrl+Alt+Strong cửa sổ), tìm kiếm Instant Runvà bỏ chọn Enable Instant Run.

Bằng cách vô hiệu hóa Instant Runvà chạy lại ứng dụng của bạn, vấn đề sẽ được giải quyết.


0

Đối với ứng dụng gốc phản ứng, lỗi là java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" là Chỉ dành cho các thiết bị có Phiên bản Android <~ 4.4

Giải quyết nó bằng cách chỉ thay thế ApplicationtrongMainApplication.java vớiMultiDexApplication

GHI CHÚ: import android.support.multidex.MultiDexApplication;


0

Tôi đã thêm đoạn mã sau vào tập tin proguard.

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

và nó đã làm việc trong trường hợp của tôi.


0

trong trường hợp của tôi, tôi quên thêm (hoặc vô tình xóa) lõi căn cứ hỏa lực trong lớp xây dựng

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

1
Đã 3 tháng trôi qua và điều này hiện không được chấp nhận: ĐỪNG THÊM NÀY! Nguồn = firebase.google.com/support/release-notes/android (Bắt buộc: Cảm ơn Google)
Aditya Anand

0

Tôi đã gặp lỗi này chỉ trên các thiết bị có API thấp hơn 21. Trong trường hợp của tôi, tôi đã phải làm việc với một dự án nơi multiDexEnabledtùy chọn build.gradleđã được đặt thành true. Tôi đã kiểm tra tệp dex từ APK và số phương thức được tham chiếu chưa đến 64k, vì vậy dự án không cần phải là một tệp đa chiều, do đó tôi đặt multiDexEnabledthành false. Giải pháp này đã làm việc cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.