Comment puis-je corriger cette CrashlyticsMissingDependencyException?

104

J'utilise le dernier Crashlytics (intégration Fabric) depuis un certain temps. Mais récemment, j'ai rencontré l'erreur de plantage suivante en raison d'une dépendance manquante, bien que je n'ai rien changé aux configurations Crashlytics.

une idée?

02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     |  |
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     |  |
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     |  |
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .   \ |  | /
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .    \    /
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     \  /
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .      \/
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
    install an Android build tool and ask a team member to invite you to this app's organization.
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .      /\
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     /  \
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .    /    \
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .   / |  | \
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     |  |
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     |  |
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     |  |
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .
02-08 22:18:00.935  18887-18887/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.android.staging, PID: 18887
    java.lang.RuntimeException: Unable to create application com.example.android.App: io.fabric.sdk.android.services.concurrency.UnmetDependencyException: com.crashlytics.android.CrashlyticsMissingDependencyException:
    This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
    install an Android build tool and ask a team member to invite you to this app's organization.
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4734)
            at android.app.ActivityThread.access$1600(ActivityThread.java:171)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5506)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)
xialine
la source
Comme mentionné dans les réponses ci-dessous, nous travaillons sur un correctif, mais l'utilisation de la version 1.14.4 fonctionnera pendant que nous continuons à aller au fond des choses.
Mike Bonnell
J'essaie juste de désinstaller et d'installer le temps de couple Fabrics for Android Studio. AS besoin de redémarrer quelques temps pour retrouver sa santé mentale.
Robert
utilisez ce lien docs.fabric.io/android/crashlytics/…
Shervin Gharib

Réponses:

22

La seule solution de contournement pour le moment, si vous avez vraiment besoin de publier votre application (comme moi), est de changer les numéros de version dynamiques en numéros statiques:

[...]

classpath 'io.fabric.tools:gradle:1.14.4'

[...]

compile('com.crashlytics.sdk.android:crashlytics:2.2.0@aar') {
        transitive = true
}

[...]

ÉDITER:

une version mise à jour du kit SDK Fabric a été publiée; vous pouvez l'obtenir en modifiant la ligne comme suit:

classpath 'io.fabric.tools:gradle:1.26.1'
gw0
la source
1
Je ne suis pas sûr de ce que vous voulez dire, mais ils ont deux repos https://maven.fabric.io/repohttps://maven.fabric.io/public
maven
1
Voici les versions disponibles: s3.amazonaws.com/fabric-artifacts/public/io/fabric/tools/gradle/…
José Antonio Postigo
96

J'ai ajouté les codes suivants avant d'installer réellement Fabric / Crashlytics:

debug {
    ext.enableCrashlytics = false
}

Le supprimer avant la première exécution avec Crashlytics a résolu le problème. Le problème ne se produit plus après la première exécution.

i906
la source
2
J'obtiens le même problème avec 1.20.1 et 2.5.2@aar. Mais je ne peux pas utiliser cette solution de contournement sur CI car l'espace de travail de construction est réinitialisé pour chaque construction :(
Hieu Rocker
1
Je travaille avec les ingénieurs de Fabric. Différents fuseaux horaires sont nulles et cela nous a pris presque 2 semaines déjà. Pas encore de solution. Mais vous pouvez essayer une solution de contournement sur le CI: ./gradlew clean assemble, puis ./gradlew assemble, l'apk généré par la deuxième commande fonctionnera normalement.
Hieu Rocker
3
@ThuyTrinh s'est avéré que c'était à cause de dataBinding = true. Crashlytics a mis en place un correctif: twittercommunity.com/t
Hieu Rocker
1
Mise à jour du plugin Fabric aujourd'hui et erreur. La solution de contournement aide, mais cela ne fonctionne pas sur les exécutions suivantes. Je dois donc commenter cette ligne pour courir.
Ernest
1
Ça ne marche pas pour moi danscom.crashlytics.sdk.android:crashlytics:2.6.8@aar
Tas
27

J'ai fait commenter ceci en gradle

apply plugin: 'io.fabric'

besoin de le décommenter

Ou si vous ne l'avez pas, ajoutez-le!

MobileMon
la source
14

On dirait que la version du plugin est spécifiée comme suit:

classpath 'io.fabric.tools:gradle:1.+' 

prend 1.15.1, qui a le problème.

Spécifier majeur et mineur au précédent 1.14semble être stable:

classpath 'io.fabric.tools:gradle:1.14.+'
Khaleesi
la source
13

J'ai eu le même problème après la mise à jour du plugin. pour résoudre le besoin de supprimer d'AndroidManifest.xml:

<meta-data
    android:name="com.crashlytics.ApiKey"
    android:value="API_SECRET_KEY" />

et ajoutez à fabric.properties:

apiSecret=API_SECRET_KEY
apiKey=YOUR_SECRET_KEY

METTRE À JOUR:

Maintenant, vous devez utiliser:

  <meta-data
      android:name="io.fabric.ApiKey"
      android:value="API_KEY" />
Sergei K
la source
1
Leurs directives d'intégration semblaient dépassées. Apparemment plus besoin de fabric.properties mais d'un <meta-data android:name="io.fabric.ApiKey" android:value="YOUR_API_KEY"/>dans le fichier AM. Le nom est passé de «com.crashlytics.ApiKey» à «io.fabric.ApiKey».
Thuy Trinh
1
Oui tu as raison. C'est important. J'ai mis à jour mon message. Je vous remercie.
Sergei K
13

Si vous utilisez la fonction de désactivation pendant le débogage comme indiqué

 Crashlytics crashlyticsKit = new Crashlytics.Builder()
            .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
            .build();
    Fabric.with(this, crashlyticsKit);

Ce qui se passe lorsque vous mettez à jour la version de crashlytics est que

Fabric.with(this, crashlyticsKit); 

est tourné vers

Fabric.with(this,new Crashlytics());

Assurez-vous donc de changer cela en crashlyticskit. Si vous faites cela correctement et que l'erreur persiste, assurez-vous d'avoir

debug {

      ext.enableCrashlytics = false
 }

sous android {buildtypes {}}

Sidhanth Sur
la source
11

Mike de Crashlytics ici. Nous avons livré une version mise à jour - 1.15.2 - plus tôt dans la journée qui inclut un correctif pour ce comportement. Si vous exécutez:

./gradlew assemble --refresh-dependencies

qui tirera dans la dernière version. Vous pouvez également voir plus de détails sur le correctif ici.

Mike Bonnell
la source
1
Je n'utilise pas l'intégration Fabric uniquement par Crashlytics lui-même et je reçois également CrashlyticsMissingDependencyException. Comment pourrais-je y faire face?
bogumil
@bogumil pouvez-vous inclure une partie de votre build.gradle?
Mike Bonnell
2
@MikeB Après un certain temps, je reçois à nouveau CrashlyticsMissingDependencyException. J'utilise: dependencies {classpath 'com.android.tools.build:gradle:1.2.3' classpath 'com.crashlytics.tools.gradle: crashlytics-gradle: 1.16.0'} et compilez 'com.crashlytics.android : crashlytics: 1.1.13 '
bogumil
Hmm, très étrange @bogumil. L'exécution des dépendances d'actualisation aide-t-elle?
Mike Bonnell
@MikeB Cela n'aide pas. J'ai également envoyé un e-mail à support @ et je peux fournir plus de détails si nécessaire.
bogumil
5

Fix pour moi De la source officielle

Désactiver Crashlytics pour les versions de débogage

Si vous n'avez pas besoin de rapports de plantage Crashlytics ou de distribution bêta pour les versions de débogage, vous pouvez accélérer vos versions de débogage en toute sécurité en désactivant complètement le plugin avec ces deux étapes:

Tout d'abord, ajoutez ceci à build.gradle de votre application:

android {
    buildTypes {
        debug {
          // Disable fabric build ID generation for debug builds
          ext.enableCrashlytics = false
          ...

Ensuite, désactivez le kit Crashlytics lors de l'exécution. Sinon, le kit Crashlytics lancera l'erreur suivante:

com.crashlytics.android.core.CrashlyticsMissingDependencyException:

This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up`

Vous pouvez désactiver le kit lors de l'exécution pour les versions de débogage uniquement avec le code suivant:

// Set up Crashlytics, disabled for debug builds
Crashlytics crashlyticsKit = new Crashlytics.Builder()
    .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build();

// Initialize Fabric with the debug-disabled crashlytics.
Fabric.with(this, crashlyticsKit);
Damir Mailybayev
la source
5

Le problème se produit également si vous incluez accidentellement Crashlytics BuildConfig - très facile à faire avec les importations automatiques d'Android Studio / IntelliJ.

J'avais importé

import com.crashlytics.android.core.BuildConfig;

Au lieu du mien

import <package_name>.BuildConfig;

nmw
la source
3

Dans mon cas, j'utilisais fabric dans un module "CommonLib" qui a été ajouté en tant que dépendance dans tous les autres modules (y compris l'application). Donc, j'avais ajouté apply plugin: 'io.fabric'après buildscript {}bloc. Donc, j'ai placé deux plugins ensemble:

apply plugin: 'com.android.library' 
apply plugin: 'io.fabric'

Et le problème a été résolu!

Rahul Rastogi
la source
1

Assurez-vous de l'ajouter apply plugin: 'io.fabric'à votre projet d'application build.gradle. Dans mon cas, j'avais un commun build.gradleavec apply plugin: 'io.fabric'. Le déplacer vers le projet d'application a résolu le problème.

Yuriy Yunikov
la source
0

Au cas où cela aiderait quelqu'un d'autre, j'ai eu un problème similaire lors de la mise à niveau de Crashlytics vers Fabric. Dans mon cas, le plugin a laissé 2 lignes de Crashlytics que je devais supprimer manuellement avant de fonctionner.

Dans le fichier gradle, sous les dépendances buildscript, j'ai dû supprimer manuellement:

classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.16.0'

De plus, sous les dépendances, j'ai dû supprimer manuellement:

compile 'com.crashlytics.android:crashlytics:1.1.13'
David M
la source
0

Vérifiez si crashlytics est désactivé dans le fichier build.gradle

    debug {
        ext.enableCrashlytics = false
    }

Utilisez plutôt

    debug {
        ext.enableCrashlytics = true
    }
Sagar
la source
0

Peut-être suis-je en retard pour répondre. Mais cela peut arriver pour une autre raison en dehors de toutes les réponses ci-dessus

Si vous manquez d'ajouter

apply plugin:'io.fabric'

Cela peut sembler étrange mais cela entraînera le même problème

Ceci est ajouté par défaut par Fabric lorsque nous nous inscrivons et ajoutons du code à partir de la fenêtre Fabric à l'aide de l'EDI, mais il peut être supprimé accidentellement.

Kumar Utkarsh
la source
0

La suppression de l'icône de l'application a corrigé Crashylitics, whaaat?

J'ai tout fait sur la base du tutoriel d'intégration, en utilisant les dernières versions, etc.

Je viens de perdre une heure à essayer de comprendre cela. Il s'avère que quelqu'un a pensé que c'était une bonne idée de lire le nom du package de l'icône de l'application au lieu d' context.packageNameobtenir les ressources de l'application dans un contexte. C'est fait dans cette méthode:

io.fabric.sdk.android.services.common.CommonUtils#getResourcePackageName

Ce souffle de toute évidence si vous arrive d'utiliser une icône qui est pas dans l'APK, par exemple: android:icon="@android:drawable/sym_def_app_icon". C'était probablement une bonne idée à l'époque, demandez-vous quel bug étrange ils essayaient de contourner?!

TWiStErRob
la source
-1
<meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" /> 

Ajoutez cela à dans AndroidManifest.xml.

Dholakiya Madhuri
la source
Donc, votre solution pour résoudre le problème est de désactiver complètement Crashlytics?
JJJ