Je teste le nouvel outil Crash: https://firebase.google.com/docs/crash/
Après avoir franchi les étapes, l'application se lance et se bloque en disant:
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.
Ajoutez le applicationId au build.gradle de l'application:
Android {
...
defaultConfig {
applicationId "com.example.my.app"
...
}
}
Et que Clean Project -> Construire ou Rebuild Project
2. Si votre minSdkVersion <= 20 ( https://developer.Android.com/studio/build/multidex )
Utilisez Multidex correctement.
build.gradle de l'application
Android {
...
defaultConfig {
....
multiDexEnabled true
}
...
}
dependencies {
implementation 'com.Android.support:multidex:1.0.3'
...
}
manifeste.xml
<application
...
Android:name="Android.support.multidex.MultiDexApplication" >
...
3.
Si vous utilisez une classe d'application personnalisée
public class MyApplication extends MultiDexApplication {
@Override
protected void attachBaseContext(Context context) {
super.attachBaseContext(context);
MultiDex.install(this);
}
}
manifeste.xml
<application
...
Android:name="com.example.my.app.MyApplication" >
...
J'étais avec le même problème dans les périphériques avec SDK <22, mais pour moi la raison est le MultiDex, le MultiDex.install
doit être dans la méthode attachBaseContext
.
Si vous utilisez MultiDex, essayez ceci:
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
}
}
app/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'
}
...
La réponse acceptée n'a pas résolu mon problème.
Si vous utilisez Multidex, votre application devrait étendre MultiDexApplication
au lieu de 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"
...
/>
J'espère que ça aide.
Si vous rencontrez le même problème mais que la variable applicationId
est déjà définie dans build.gradle
, vous pouvez également procéder comme suit:
Build
> Clean Project
J'ai eu le même problème dans les appareils Pre Lollipop. Pour résoudre cela, j'ai procédé comme suit. En attendant, j'utilisais multiDex dans le projet.
1. ajoutez ceci pour build.gradle dans le module: app
multiDexEnabled = true
dexOptions {
javaMaxHeapSize "4g"
}
2. ajouter cette dépendance
compile 'com.Android.support:multidex:1.0.1'
3. Puis dans l'application principale
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.Dans le fichier manifestes
<application
Android:allowBackup="true"
Android:name="Android.support.multidex.MultiDexApplication"
Cela fonctionne pour moi. J'espère que ça va t'aider aussi :)
vous devriez etre sur
ajouter cette ligne à votre manifeste
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>
N'incluez pas toute la bibliothèque de services de jeu, mais utilisez celle dont vous avez besoin. Remplacez la ligne dans votre build.gradle:
compile 'com.google.Android.gms:play-services:9.6.1'
avec celui approprié de API de services Google Play , comme par exemple:
compile 'com.google.Android.gms:play-services-gcm:9.6.1'
Ajoutez ceci à votre build.gradle au niveau du module:
Android {
defaultConfig {
....
multiDexEnabled true
}
...
}
dependencies {
compile 'com.Android.support:multidex:1.0.1'
.........
}
Si vous remplacez la classe Application
, étendez-la à partir de MultiDexApplication
:
YourApplicationClass extends MultiDexApplication
Si vous ne pouvez pas l'étendre à partir de la classe MultiDexApplication
, remplacez la méthode attachBaseContext()
comme suit:
protected void attachBaseContext(Context base) {
super.attachBaseContext(context);
Multidex.install(this);
}
Et ne lancez rien avant que MultiDex.install(this)
soit exécuté.
Si vous ne remplacez pas la classe Application
, éditez simplement votre fichier manifeste comme suit:
<?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>
Apportez des changements comme celui-ci
Dans la construction (app) ::
defaultConfig {
multiDexEnabled true
}
dependencies {
compile 'com.Android.support:multidex:1.0.1'
}
In Manifest ::
<application
Android:name=".BaseApplication"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name">
Dans BaseApplication ::
public class BaseApplication extends Application{
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Cela devrait fonctionner:
Étape 1:
defaultConfig {
applicationId "service.ingreens.com.gpsautoon"
minSdkVersion 17
targetSdkVersion 25
versionCode 1
versionName "1.0"
multiDexEnabled true
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
Étape 2:
compile 'com.Android.support:multidex:1.0.1'
Étape 3: / Prenez un autre cours
public class MyApplication extends MultiDexApplication {
}
Étape 4: / Ajoutez cette ligne sur le manifeste
<application
Android:name="Android.support.multidex.MultiDexApplication">
</application>
Dans mon cas, le problème a été résolu en ajoutant cette ligne au module build.gradle:
// AJOUTE CE AT LE BAS
apply plugin: 'com.google.gms.google-services'
Le mien était dû au fait que Firebase SDK dans le fichier Gradle était configuré avec une version de numéro erronée.
J'ai enlevé les debs Firebase de Gradle et les ai réinstallés en utilisant Firebase Assistant
Dans mon cas, le problème est survenu après la migration vers AndroidX. Pour une raison quelconque, app appelait MultiDex.install () avec réflexion:
final Class<?> clazz = Class.forName("Android.support.multidex.MultiDex");
final Method method = clazz.getDeclaredMethod("install", Context.class);
method.invoke(null, this);
J'ai changé de paquet de Android.support.multidex.MultiDex
à androidx.multidex.MultiDex
. Ça a marché.
Au lieu d'ajouter manuellement le nom du paquet sur le build.gradle
, vous pouvez le faire comme suit:
ajoutez d'abord cette ligne au début
import Java.util.regex.Pattern
Puis ajoutez ceci sur le defaultConfig
Android {
...
defaultConfig {
...
applicationId = doExtractStringFromManifest("package")
...
}
...
}
Et enfin, ajoutez la méthode 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)
}
Comme il y a beaucoup de commentaires de Cordova sur la réponse, si vous travaillez avec Cordova, vous ne devriez pas vraiment éditer le build.gradle
vous-même, il y a un commentaire au début qui dit
// FICHIER GÉNÉRÉ! NE PAS MODIFIER!
Donc, si vous utilisez un Cordova, la meilleure chose à faire est de passer à cordova-Android 5.1.0 ou une version ultérieure lorsque ces modifications sont déjà présentes.
Pour l’application native de réaction, l’erreur était Java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: Java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider"
Il s’agissait uniquement des appareils dotés de Android Version <~ 4.4.
Résolu en remplaçant simplement Application
dans MainApplication.Java
par MultiDexApplication
NOTE: import Android.support.multidex.MultiDexApplication;
Accédez au paramètre de studio Android (en appuyant sur Ctrl+Alt+S
dans Windows), recherchez Instant Run
et décochez Enable Instant Run
.
En désactivant Instant Run
et en exécutant à nouveau votre application, le problème sera résolu.