Jak mogę naprawić ten wyjątek CrashlyticsMissingDependencyException?


104

Od jakiegoś czasu korzystam z najnowszej wersji Crashlytics (integracja Fabric). Ale ostatnio napotkałem następujący błąd awarii spowodowany brakiem zależności, chociaż nie zmieniłem niczego w konfiguracjach Crashlytics.

dowolny pomysł?

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)

Jak wspomniano w poniższych odpowiedziach, pracujemy nad poprawką, ale używanie wersji 1.14.4 będzie działać, dopóki będziemy nadal dochodzić do sedna tego.
Mike Bonnell

Po prostu próbuję odinstalować i zainstalować czas par Fabrics for Android Studio. AS potrzebuje trochę czasu na ponowne uruchomienie, aby odzyskać zdrowie psychiczne.
Robert

Odpowiedzi:


22

Jedynym obejściem na razie, jeśli naprawdę potrzebujesz opublikować swoją aplikację (tak jak ja), jest zmiana dynamicznych numerów wersji na statyczne:

[...]

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

[...]

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

[...]

EDYTOWAĆ:

opublikowano zaktualizowaną wersję Fabric SDK; możesz to uzyskać, zmieniając wiersz na ten:

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

1
Nie jestem pewien, co masz na myśli, ale mają dwa identyczne https://maven.fabric.io/repohttps://maven.fabric.io/public
repozytoria Maven


96

Dodałem następujące kody, zanim faktycznie zainstalowałem Fabric / Crashlytics:

debug {
    ext.enableCrashlytics = false
}

Usunięcie go przed pierwszym uruchomieniem z Crashlytics rozwiązało problem. Po pierwszym uruchomieniu problem już nie występuje.


2
Otrzymuję ten sam problem z 1.20.1 i 2.5.2@aar. Ale nie mogę zastosować tego obejścia w przypadku CI, ponieważ obszar roboczy kompilacji jest resetowany dla każdej kompilacji :(
Hieu Rocker,

1
Pracuję z inżynierami w Fabric. Różne strefy czasowe są do niczego i zajęło nam to już prawie 2 tygodnie. Wciąż nie ma rozwiązania. Ale możesz wypróbować obejście CI: ./gradlew clean assemble, a następnie ./gradlew assemble, apk wygenerowany przez drugie polecenie będzie działał normalnie.
Hieu Rocker

3
@ThuyTrinh okazało się, że to z powodu dataBinding = true. Crashlytics wprowadził poprawkę: twittercommunity.com/t/ ...
Hieu Rocker

1
Zaktualizowano dzisiaj wtyczkę tkaniny i otrzymałem ten błąd. Obejście pomaga, ale nie działa przy kolejnych uruchomieniach. Więc muszę skomentować tę linię, aby uruchomić.
Ernest

1
To nie działa dla mnie wcom.crashlytics.sdk.android:crashlytics:2.6.8@aar
Tas

27

Skomentowałem to w gradle

apply plugin: 'io.fabric'

trzeba go odkomentować

A jeśli go nie masz, dodaj!


14

Wygląda na to, że określając wersję wtyczki jako:

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

odbiera wersję 1.15.1, która ma problem.

Określanie głównych i mniejszych niż poprzednie 1.14wydaje się być stabilne:

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

13

Miałem ten sam problem po aktualizacji wtyczki. aby rozwiązać, należy usunąć z AndroidManifest.xml:

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

i dodaj do tkaniny. właściwości:

apiSecret=API_SECRET_KEY
apiKey=YOUR_SECRET_KEY

AKTUALIZACJA:

Teraz musisz użyć:

  <meta-data
      android:name="io.fabric.ApiKey"
      android:value="API_KEY" />

1
Ich wytyczne dotyczące integracji wydawały się nieaktualne. Pozornie nie potrzeba już fabric.properties, ale <meta-data android:name="io.fabric.ApiKey" android:value="YOUR_API_KEY"/>w pliku AM. Nazwa została zmieniona z „com.crashlytics.ApiKey” na „io.fabric.ApiKey”.
Thuy Trinh

1
Tak masz rację. To ważne. Zaktualizowałem swój post. Dziękuję Ci.
Siergiej K

13

Jeśli używasz funkcji wyłączania podczas debugowania, jak pokazano

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

To, co się dzieje, gdy aktualizujesz wersję crashlytics, jest takie

Fabric.with(this, crashlyticsKit); 

jest zwrócony do

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

Więc pamiętaj, aby zmienić to z powrotem na crashlyticskit. Jeśli robisz to poprawnie, a błąd nadal się pojawia, upewnij się, że tak

debug {

      ext.enableCrashlytics = false
 }

pod Androidem {buildtypes {}}


11

Mike z Crashlytics tutaj. Wcześniej udostępniliśmy zaktualizowaną wersję - 1.15.2 - zawierającą poprawkę dotyczącą tego zachowania. Jeśli biegasz:

./gradlew assemble --refresh-dependencies

który ściągnie najnowszą wersję. Możesz również zobaczyć więcej szczegółów na temat poprawki tutaj.


1
Nie używam integracji Fabric przez samą Crashlytics, a także otrzymuję CrashlyticsMissingDependencyException. Jak mogłem sobie z tym poradzić?
bogumil

@bogumil czy możesz dołączyć część swojego build.gradle?
Mike Bonnell

2
@MikeB Po pewnym czasie znowu otrzymuję CrashlyticsMissingDependencyException. Używam: zależności {classpath 'com.android.tools.build:gradle:1.2.3' classpath 'com.crashlytics.tools.gradle: crashlytics-gradle: 1.16.0'} i kompiluję 'com.crashlytics.android : crashlytics: 1.1.13 '
bogumil

Hmm, bardzo dziwne @bogumil. Czy uruchamianie zależności odświeżania pomaga?
Mike Bonnell

@MikeB To nie pomaga. Wysłałem również e-mail do support @ i mogę dostarczyć więcej szczegółów, jeśli to konieczne.
bogumil

5

Napraw dla mnie Z oficjalnego źródła

Wyłącz Crashlytics dla kompilacji debugowania

Jeśli nie potrzebujesz raportowania awarii Crashlytics lub dystrybucji wersji beta dla kompilacji do debugowania, możesz bezpiecznie przyspieszyć kompilacje do debugowania, wyłączając wtyczkę całkowicie, wykonując te dwa kroki:

Najpierw dodaj to do pliku build.gradle swojej aplikacji:

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

Następnie wyłącz zestaw Crashlytics w czasie wykonywania. W przeciwnym razie zestaw Crashlytics zgłosi następujący błąd:

com.crashlytics.android.core.CrashlyticsMissingDependencyException:

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

Możesz wyłączyć zestaw w czasie wykonywania dla kompilacji debugowania tylko za pomocą następującego kodu:

// 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);

5

Ten problem występuje również, jeśli przypadkowo dołączysz Crashlytics BuildConfig - bardzo łatwe do wykonania dzięki automatycznemu importowi Android Studio / IntelliJ.

Sprowadziłem

import com.crashlytics.android.core.BuildConfig;

Zamiast własnego

import <package_name>.BuildConfig;



3

W moim przypadku używałem tkaniny w module „CommonLib”, który został dodany jako zależność we wszystkich innych modułach (w tym aplikacji). Więc dodałem apply plugin: 'io.fabric'po buildscript {}bloku. Więc umieściłem razem dwie wtyczki:

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

I problem został rozwiązany!


1

Pamiętaj, aby dodać apply plugin: 'io.fabric'do projektu aplikacji build.gradle. W moim przypadku miałem coś wspólnego build.gradlez apply plugin: 'io.fabric'. Przeniesienie go do projektu aplikacji rozwiązało problem.


0

Jeśli to pomoże komuś innemu, miałem podobny problem podczas uaktualniania Crashlytics do Fabric. W moim przypadku wtyczka pozostawiła 2 linie z Crashlytics, które musiałem ręcznie usunąć, zanim zadziała.

W pliku gradle, pod zależnościami buildscript, musiałem ręcznie usunąć:

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

Poza tym w zależnościach musiałem ręcznie usunąć:

compile 'com.crashlytics.android:crashlytics:1.1.13'

0

Sprawdź, czy crashlytics jest wyłączony w pliku build.gradle

    debug {
        ext.enableCrashlytics = false
    }

Zamiast tego użyj

    debug {
        ext.enableCrashlytics = true
    }

0

Może spóźnię się na odpowiedź. Ale może się to zdarzyć z jeszcze jednego powodu oprócz wszystkich powyższych odpowiedzi

Jeśli przegapisz dodanie

apply plugin:'io.fabric'

Może się to wydawać dziwne, ale spowoduje to ten sam problem

Jest to domyślnie dodawane przez tkaninę, kiedy rejestrujemy się i dodajemy kod z okna Fabric przy użyciu IDE, ale przypadkowo można go usunąć.


0

Usunięcie ikony aplikacji naprawiono Crashylitics, co?

Zrobiłem wszystko w oparciu o samouczek wprowadzający, używając najnowszych wersji itp.

Właśnie zmarnowałem godzinę, próbując to rozgryźć. Okazuje się, że ktoś pomyślał, że dobrym pomysłem jest przeczytanie nazwy pakietu ikony aplikacji, zamiast context.packageNamepobierania zasobów aplikacji w kontekście. Robi się to tą metodą:

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

To oczywiście wysadza jeśli zdarzy ci się użyć ikonę, która nie jest w środku APK, na przykład: android:icon="@android:drawable/sym_def_app_icon". Wtedy to prawdopodobnie był dobry pomysł, zastanawiam się, jaki dziwny błąd próbowali obejść ?!


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

Dodaj to do AndroidManifest.xml.


Więc rozwiązaniem problemu jest całkowite wyłączenie Crashlytics?
JJJ
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.