Не удается получить поставщик com.гуглить.опорному пункту.поставщик.FirebaseInitProvider
Я тестирую новый инструмент аварии : 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
13 ответов:
1.
добавить ид_приложения к сборке приложения.Gradle в:
android { ... defaultConfig { applicationId "com.example.my.app" ... } }
и Чистый Проект - > Построить или Перестроить Проект
2. если ваш minSdkVersion https://developer.android.com/studio/build/multidex)
правильно Используйте Multidex.
приложения строить.gradle
android { ... defaultConfig { .... multiDexEnabled true } ... } dependencies { implementation 'com.android.support:multidex:1.0.3' ... }
манифест.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); } }
манифест.xml
<application ... android:name="com.example.my.app.MyApplication" > ...
Я был с той же проблемой в устройствах с SDK MultiDex.install должно быть
attachBaseContext
метод.если вы используете MultiDex, попробуйте это:
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 } }
приложения/строить.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' } ...
принятый ответ не решить мою проблему.
если вы используете Multidex, ваше приложение должно расширяться
MultiDexApplication
вместоApplication
.Мое_приложение.java
public class MyApplication extends MultiDexApplication{ ... }
AndroidManifest.xml
<application android:name="your.package.name.MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" ... />
надеюсь, что это помогает.
если вы получите ту же проблему, но уже есть
applicationId
установить вbuild.gradle
, вы также можете попробовать следующее:
- в Android Studio:
Build
>Clean Project
- в других IDEs: очистить, перестроить, что угодно...
вы должны быть уверены
чтобы добавить эту строку в манифест
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>
у меня была такая же проблема в Pre леденец устройств. Чтобы решить эту проблему, я сделал следующее. Тем временем я использовал multiDex в проекте.
1. добавьте это для сборки.gradle в модуле: appmultiDexEnabled = true dexOptions { javaMaxHeapSize "4g" }
2. добавьте эту зависимость
compile 'com.android.support:multidex:1.0.1'
3.Тогда в главном приложении
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.In файл манифестов
<application android:allowBackup="true" android:name="android.support.multidex.MultiDexApplication"
это работает для меня. Надеюсь, это поможет вам тоже:)
Не включайте всю библиотеку play services, но используйте тот, который вам нужен.Замените строку в вашем построить.gradle:
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'
добавьте это в сборку на уровне модуля.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>
внести изменения, как это
в build(приложение) ::
defaultConfig { multiDexEnabled true } dependencies { compile 'com.android.support:multidex:1.0.1' }
В Манифесте::
<application android:name=".BaseApplication" android:icon="@mipmap/ic_launcher" android:label="@string/app_name">
В BaseApplication::
public class BaseApplication extends Application{ @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
это должно работает:
Шаг 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>
в моем случае проблема была решена путем добавления этой строки в сборку модуля.Gradle в:
/ / ДОБАВИТЬ ЭТО В НИЖНЕЙ ЧАСТИ
apply plugin: 'com.google.gms.google-services'
вместо того, чтобы вручную добавлять имя пакета на
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) }
поскольку есть много комментариев Cordova к ответу, если вы работаете с Cordova, вы не должны действительно редактировать
build.gradle
сам, у него есть комментарий в начале, что скажи/ / СГЕНЕРИРОВАННЫЙ ФАЙЛ! НЕ РЕДАКТИРУЙТЕ!
Итак, если вы используете Cordova, лучшее, что вы можете сделать, это обновить до cordova-android 5.1.0 или выше, где эти изменения уже присутствуют.