Wie kann ich diese CrashlyticsMissingDependencyException beheben?

104

Ich benutze seit einiger Zeit die neuesten Crashlytics (Fabric-Integration). Vor kurzem trat jedoch der folgende Absturzfehler aufgrund fehlender Abhängigkeit auf, obwohl ich an den Crashlytics-Konfigurationen nichts geändert habe.

irgendeine Idee?

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)
Xialin
quelle
Wie in den Antworten unten erwähnt, arbeiten wir an einem Fix, aber die Verwendung von 1.14.4 funktioniert, während wir dem weiterhin auf den Grund gehen.
Mike Bonnell
Ich versuche nur, die Zeit für Fabrics for Android Studio-Paare zu deinstallieren und zu installieren. AS müssen ein paar Mal neu starten, um wieder gesund zu werden.
Robert
Verwenden Sie diesen Link docs.fabric.io/android/crashlytics/…
Shervin Gharib

Antworten:

22

Die einzige Problemumgehung für den Moment, wenn Sie Ihre App wirklich veröffentlichen müssen (wie ich), besteht darin, die dynamischen Versionsnummern in statische zu ändern:

[...]

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

[...]

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

[...]

BEARBEITEN:

Eine aktualisierte Version des Fabric SDK wurde veröffentlicht. Sie können es erhalten, indem Sie die Zeile wie folgt ändern:

classpath 'io.fabric.tools:gradle:1.26.1'
gw0
quelle
1
Ich bin nicht sicher, was du meinst, aber sie zwei identische Maven Repos: https://maven.fabric.io/repoundhttps://maven.fabric.io/public
gw0
1
Hier sind die verfügbaren Versionen: s3.amazonaws.com/fabric-artifacts/public/io/fabric/tools/gradle/…
José Antonio Postigo
96

Ich habe die folgenden Codes hinzugefügt, bevor ich Fabric / Crashlytics installiert habe:

debug {
    ext.enableCrashlytics = false
}

Das Entfernen des Problems vor dem ersten Durchlauf mit Crashlytics löste das Problem. Das Problem tritt nach dem ersten Durchlauf nicht mehr auf.

i906
quelle
2
Ich bekomme das gleiche Problem mit 1.20.1 und 2.5.2@aar. Aber ich kann diese Problemumgehung nicht auf CI verwenden, da der Build-Arbeitsbereich für jeden Build zurückgesetzt wird :(
Hieu Rocker
1
Ich arbeite mit den Ingenieuren von Fabric zusammen. Verschiedene Zeitzonen saugen und es hat schon fast 2 Wochen gedauert. Noch keine Lösung. Sie können jedoch eine Problemumgehung für das CI versuchen: ./gradlew clean assemble, dann ./gradlew assemble, die vom zweiten Befehl generierte apk funktioniert wie gewohnt.
Hieu Rocker
3
@ThuyTrinh stellte sich heraus, dass es an dataBinding = true liegt. Crashlytics hat eine Lösung dafür eingeführt: twittercommunity.com/t/…
Hieu Rocker
1
Das Fabric Plugin wurde heute aktualisiert und hat diesen Fehler erhalten. Problemumgehung hilft, funktioniert aber bei nachfolgenden Läufen nicht. Also muss ich diese Zeile für den Lauf kommentieren.
Ernest
1
Es funktioniert nicht für mich incom.crashlytics.sdk.android:crashlytics:2.6.8@aar
Tas
27

Ich hatte dies in gradle auskommentiert

apply plugin: 'io.fabric'

musste es auskommentieren

Oder wenn Sie es nicht haben, fügen Sie es hinzu!

MobileMon
quelle
14

Scheint so, als würde man die Plugin-Version wie folgt angeben:

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

nimmt 1.15.1 auf, was das Problem hat.

Die Angabe von Dur und Moll gegenüber früheren 1.14scheint stabil zu sein:

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

Ich hatte das gleiche Problem nach dem Update-Plugin. Um das Problem zu lösen, entfernen Sie es aus AndroidManifest.xml:

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

und zu Fabric.Eigenschaften hinzufügen:

apiSecret=API_SECRET_KEY
apiKey=YOUR_SECRET_KEY

AKTUALISIEREN:

Jetzt müssen Sie verwenden:

  <meta-data
      android:name="io.fabric.ApiKey"
      android:value="API_KEY" />
Sergei K.
quelle
1
Ihre Integrationsrichtlinien schienen veraltet zu sein. Scheinbar brauchen Sie keine fab.properties mehr, sondern ein <meta-data android:name="io.fabric.ApiKey" android:value="YOUR_API_KEY"/>in der AM-Datei. Der Name wurde von "com.crashlytics.ApiKey" in "io.fabric.ApiKey" geändert.
Thuy Trinh
1
Ja du hast Recht. Es ist wichtig. Ich habe meinen Beitrag aktualisiert. Danke dir.
Sergei K
13

Wenn Sie die Deaktivierungsfunktion während des Debuggens wie gezeigt verwenden

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

Was passiert, wenn Sie die Version von Crashlytics aktualisieren, ist das

Fabric.with(this, crashlyticsKit); 

wird zu gedreht

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

Stellen Sie also sicher, dass Sie dies wieder in Crashlyticskit ändern. Wenn Sie dies richtig machen und der Fehler weiterhin auftritt, stellen Sie sicher, dass Sie dies getan haben

debug {

      ext.enableCrashlytics = false
 }

unter android {buildtypes {}}

Sidhanth Sur
quelle
11

Mike von Crashlytics hier. Wir haben heute eine aktualisierte Version - 1.15.2 - ausgeliefert, die eine Korrektur für dieses Verhalten enthält. Wenn du läufst:

./gradlew assemble --refresh-dependencies

das wird in der neuesten Version ziehen. Weitere Details zum Fix finden Sie hier.

Mike Bonnell
quelle
1
Ich verwende die Fabric-Integration nicht nur von Crashlytics selbst und erhalte auch die CrashlyticsMissingDependencyException. Wie könnte ich damit umgehen?
Bogumil
@bogumil kannst du einen Teil deines build.gradle einbinden?
Mike Bonnell
2
@MikeB Nach einiger Zeit erhalte ich wieder die CrashlyticsMissingDependencyException. Ich verwende: Abhängigkeiten {Klassenpfad 'com.android.tools.build:gradle:1.2.3' Klassenpfad 'com.crashlytics.tools.gradle: crashlytics-gradle: 1.16.0'} und kompiliere 'com.crashlytics.android : Crashlytics: 1.1.13 '
Bogumil
Hmm, sehr seltsam @bogumil. Hilft das Ausführen von Aktualisierungsabhängigkeiten?
Mike Bonnell
@ MikeB Es hilft nicht. Ich habe auch eine E-Mail an support @ gesendet und kann bei Bedarf weitere Details liefern.
Bogumil
5

Fix für mich Aus offizieller Quelle

Deaktivieren Sie Crashlytics für Debug-Builds

Wenn Sie für Debug-Builds keine Crashlytics-Crash-Reporting oder Beta-Distribution benötigen, können Sie Ihre Debug-Builds sicher beschleunigen, indem Sie das Plugin mit den folgenden beiden Schritten vollständig deaktivieren:

Fügen Sie dies zunächst dem build.gradle Ihrer App hinzu:

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

Deaktivieren Sie anschließend das Crashlytics-Kit zur Laufzeit. Andernfalls gibt das Crashlytics-Kit den folgenden Fehler aus:

com.crashlytics.android.core.CrashlyticsMissingDependencyException:

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

Sie können das Kit zur Laufzeit für Debug-Builds nur mit dem folgenden Code deaktivieren:

// 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
quelle
5

Das Problem tritt auch auf, wenn Sie versehentlich die Crashlytics BuildConfig einbinden - sehr einfach mit automatischen Importen von Android Studio / IntelliJ.

Ich hatte importiert

import com.crashlytics.android.core.BuildConfig;

Anstelle meiner eigenen

import <package_name>.BuildConfig;

nmw
quelle
3

In meinem Fall habe ich Fabric in einem "CommonLib" -Modul verwendet, das in allen anderen Modulen (einschließlich App) als Abhängigkeit hinzugefügt wurde. Also hatte ich apply plugin: 'io.fabric'nach buildscript {}Block hinzugefügt . Also habe ich zwei Plugins zusammengestellt:

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

Und das Problem wurde gelöst!

Rahul Rastogi
quelle
1

Stellen Sie sicher, dass Sie apply plugin: 'io.fabric'Ihrem Anwendungsprojekt hinzufügen build.gradle. In meinem Fall hatte ich eine Gemeinsamkeit build.gradlemit apply plugin: 'io.fabric'. Das Verschieben in ein Anwendungsprojekt löste das Problem.

Yuriy Yunikov
quelle
0

Falls dies jemand anderem hilft, hatte ich ein ähnliches Problem beim Upgrade von Crashlytics auf Fabric. In meinem Fall hat das Plugin 2 Zeilen von Crashlytics hinterlassen, die ich manuell entfernen musste, bevor es funktionieren würde.

In der Gradle-Datei musste ich unter Buildscript-Abhängigkeiten manuell entfernen:

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

Außerdem musste ich unter Abhängigkeiten manuell entfernen:

compile 'com.crashlytics.android:crashlytics:1.1.13'
David M.
quelle
0

Überprüfen Sie, ob Crashlytics in der Datei build.gradle deaktiviert ist

    debug {
        ext.enableCrashlytics = false
    }

Verwenden Sie stattdessen

    debug {
        ext.enableCrashlytics = true
    }
Sagar
quelle
0

Vielleicht bin ich zu spät, um zu antworten. Dies kann jedoch aus einem weiteren Grund geschehen, abgesehen von allen oben genannten Antworten

Wenn Sie nicht hinzufügen möchten

apply plugin:'io.fabric'

Dies mag seltsam erscheinen, führt jedoch zu demselben Problem

Dies wird standardmäßig von Fabric hinzugefügt, wenn wir uns anmelden und Code aus dem Fabric-Fenster mit IDE hinzufügen. Er kann jedoch versehentlich gelöscht werden.

Kumar Utkarsh
quelle
0

Entfernen des Anwendungssymbols behoben Crashylitics, was?

Ich habe alles basierend auf dem Onboarding-Tutorial, unter Verwendung der neuesten Versionen usw. erledigen lassen.

Ich habe nur eine Stunde damit verbracht, das herauszufinden. Es stellte sich heraus, dass jemand dachte, es sei eine gute Idee, den Paketnamen des Anwendungssymbols zu lesen, anstatt context.packageNamedie Ressourcen der Anwendung in einem bestimmten Kontext abzurufen. Es wird in dieser Methode gemacht:

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

Dies geht offensichtlich in die Luft, wenn Sie zufällig ein Symbol verwenden, das sich nicht in der APK befindet, zum Beispiel : android:icon="@android:drawable/sym_def_app_icon". Es war damals wahrscheinlich eine gute Idee, sich zu fragen, welchen seltsamen Fehler sie zu umgehen versuchten?!

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

Fügen Sie das hinzu AndroidManifest.xml.

Dholakiya Madhuri
quelle
Ihre Lösung zur Behebung des Problems besteht also darin, Crashlytics vollständig zu deaktivieren?
JJJ