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)
xialin
źródło
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
użyj tego linku docs.fabric.io/android/crashlytics/ ...
Shervin Gharib

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'
gw0
źródło
1
Nie jestem pewien, co masz na myśli, ale mają dwa identyczne https://maven.fabric.io/repohttps://maven.fabric.io/public
repozytoria Maven
1
Oto dostępne wersje: s3.amazonaws.com/fabric-artifacts/public/io/fabric/tools/gradle/ ...
José Antonio Postigo
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.

i906
źródło
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!

MobileMon
źródło
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.+'
Khaleesi
źródło
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" />
Siergiej K.
źródło
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 {}}

Sidhanth Sur
źródło
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.

Mike Bonnell
źródło
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);
Damir Mailybayev
źródło
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;

nmw
źródło
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!

Rahul Rastogi
źródło
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.

Yuriy Yunikov
źródło
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'
David M.
źródło
0

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

    debug {
        ext.enableCrashlytics = false
    }

Zamiast tego użyj

    debug {
        ext.enableCrashlytics = true
    }
Sagar
źródło
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ąć.

Kumar Utkarsh
źródło
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ść ?!

TWiStErRob
źródło
-1
<meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" /> 

Dodaj to do AndroidManifest.xml.

Dholakiya Madhuri
źródło
Więc rozwiązaniem problemu jest całkowite wyłączenie Crashlytics?
JJJ