Bagaimana cara memperbaiki CrashlyticsMissingDependencyException ini?

104

Saya telah menggunakan Crashlytics (integrasi Fabric) terbaru untuk sementara waktu. Namun baru-baru ini saya mengalami error error berikut karena dependensi yang hilang meskipun saya tidak mengubah apa pun tentang konfigurasi Crashlytics.

ada ide?

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
sumber
Seperti yang disebutkan dalam jawaban di bawah, kami sedang mengerjakan perbaikan, tetapi menggunakan 1.14.4 akan berfungsi sementara kami terus sampai ke dasar ini.
Mike Bonnell
Saya hanya mencoba untuk menghapus dan menginstal Fabrics untuk pasangan Android Studio. AS perlu memulai kembali beberapa waktu untuk mendapatkan kewarasannya kembali.
Robert
gunakan tautan ini docs.fabric.io/android/crashlytics/…
Shervin Gharib

Jawaban:

22

Satu-satunya solusi untuk saat ini, jika Anda benar-benar perlu memublikasikan aplikasi Anda (seperti saya), adalah mengubah nomor versi dinamis menjadi statis:

[...]

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

[...]

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

[...]

EDIT:

versi terbaru dari Fabric SDK telah diterbitkan; Anda bisa mendapatkannya dengan mengubah baris menjadi ini:

classpath 'io.fabric.tools:gradle:1.26.1'
gw0
sumber
1
Saya tidak yakin apa yang Anda maksud, tetapi mereka adalah dua repo maven yang identik: https://maven.fabric.io/repodanhttps://maven.fabric.io/public
gw0
1
Ini adalah versi yang tersedia: s3.amazonaws.com/fabric-artifacts/public/io/fabric/tools/gradle/…
José Antonio Postigo
96

Saya telah menambahkan kode berikut sebelum saya benar-benar menginstal Fabric / Crashlytics:

debug {
    ext.enableCrashlytics = false
}

Menghapusnya sebelum menjalankan pertama dengan Crashlytics memecahkan masalah. Masalah tidak lagi terjadi setelah dijalankan pertama kali.

i906
sumber
2
Saya mendapatkan masalah yang sama dengan 1.20.1 dan 2.5.2@aar. Tetapi saya tidak dapat menggunakan solusi ini pada CI karena ruang kerja build disetel ulang untuk setiap build :(
Hieu Rocker
1
Saya bekerja dengan para insinyur di Fabric. Zona waktu yang berbeda menyebalkan dan kami membutuhkan waktu hampir 2 minggu. Masih belum ada solusi. Tetapi Anda dapat mencoba solusi pada CI: ./gradlew clean assemble, lalu ./gradlew assemble, apk yang dihasilkan oleh perintah kedua akan berfungsi seperti biasa.
Hieu Rocker
3
@ThuyTrinh ternyata karena dataBinding = true. Crashlytics telah meluncurkan perbaikan untuk itu: twittercommunity.com/t/…
Hieu Rocker
1
Memperbarui plugin kain hari ini dan mendapatkan kesalahan ini. Solusi membantu, tetapi tidak berfungsi pada proses selanjutnya. Jadi saya harus mengomentari baris ini untuk dijalankan.
Ernest
1
Ini tidak bekerja untuk saya dicom.crashlytics.sdk.android:crashlytics:2.6.8@aar
Tas
27

Saya memiliki komentar ini di gradle

apply plugin: 'io.fabric'

perlu untuk menghapusnya

Atau jika Anda tidak memilikinya, tambahkan!

MobileMon
sumber
14

Sepertinya menentukan versi plugin sebagai:

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

mengambil 1.15.1, yang bermasalah.

Menentukan mayor dan minor ke sebelumnya 1.14tampaknya stabil:

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

Saya memiliki masalah yang sama setelah memperbarui plugin. untuk mengatasi kebutuhan, hapus dari AndroidManifest.xml:

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

dan tambahkan ke fabric.properties:

apiSecret=API_SECRET_KEY
apiKey=YOUR_SECRET_KEY

MEMPERBARUI:

Sekarang, Anda harus menggunakan:

  <meta-data
      android:name="io.fabric.ApiKey"
      android:value="API_KEY" />
Sergei K
sumber
1
Panduan integrasi mereka sepertinya sudah ketinggalan zaman. Tampaknya tidak lagi membutuhkan fabric.properties tetapi <meta-data android:name="io.fabric.ApiKey" android:value="YOUR_API_KEY"/>dalam file AM. Nama diubah dari "com.crashlytics.ApiKey" menjadi "io.fabric.ApiKey".
Thuy Trinh
1
Ya, Anda benar. Ini penting. Saya memperbarui posting saya. Terima kasih.
Sergei K
13

Jika Anda menggunakan fungsi nonaktifkan selama debug seperti yang ditunjukkan

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

Apa yang terjadi ketika Anda memperbarui versi crashlytics adalah itu

Fabric.with(this, crashlyticsKit); 

diubah menjadi

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

Jadi pastikan untuk mengubahnya kembali ke crashlyticskit. Jika Anda melakukan ini dengan benar dan kesalahan masih muncul, pastikan Anda sudah melakukannya

debug {

      ext.enableCrashlytics = false
 }

di bawah android {buildtypes {}}

Sidhanth Sur
sumber
11

Mike dari Crashlytics di sini. Kami mengirimkan versi yang diperbarui - 1.15.2 - sebelumnya hari ini yang menyertakan perbaikan untuk perilaku ini. Jika Anda menjalankan:

./gradlew assemble --refresh-dependencies

yang akan menarik versi terbaru. Anda juga dapat melihat detail lebih lanjut tentang perbaikannya di sini.

Mike Bonnell
sumber
1
Saya tidak menggunakan integrasi Fabric hanya dengan Crashlytics itu sendiri dan saya juga mendapatkan CrashlyticsMissingDependencyException. Bagaimana saya bisa menghadapinya?
bogumil
@bogumil dapatkah Anda menyertakan bagian dari build.gradle Anda?
Mike Bonnell
2
@MikeB Setelah beberapa waktu, lagi-lagi saya mendapatkan CrashlyticsMissingDependencyException. Saya menggunakan: dependencies {classpath 'com.android.tools.build:gradle:1.2.3' classpath 'com.crashlytics.tools.gradle: crashlytics-gradle: 1.16.0'} dan kompilasi 'com.crashlytics.android : crashlytics: 1.1.13 '
bogumil
Hmm, sangat aneh @bogumil. Apakah menjalankan refresh-dependencies membantu?
Mike Bonnell
@MikeB Itu tidak membantu. Saya juga mengirim email ke support @ dan saya dapat memberikan detail lebih lanjut jika perlu.
bogumil
5

Perbaiki untuk saya Dari sumber resmi

Nonaktifkan Crashlytics untuk Debug Builds

Jika Anda tidak memerlukan Crashlytics crash reporting atau distribusi beta untuk debug build, Anda dapat mempercepat debug-build dengan aman dengan menonaktifkan plugin sepenuhnya dengan dua langkah berikut:

Pertama, tambahkan ini ke build.gradle aplikasi Anda:

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

Selanjutnya, nonaktifkan kit Crashlytics saat runtime. Jika tidak, kit Crashlytics akan menampilkan error berikut:

com.crashlytics.android.core.CrashlyticsMissingDependencyException:

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

Anda dapat menonaktifkan kit pada waktu proses untuk build debug hanya dengan kode berikut:

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

Masalah ini juga terjadi jika Anda tidak sengaja menyertakan Crashlytics BuildConfig - sangat mudah dilakukan dengan impor otomatis Android Studio / IntelliJ.

Saya telah mengimpor

import com.crashlytics.android.core.BuildConfig;

Bukan milikku sendiri

import <package_name>.BuildConfig;

nmw
sumber
3

Dalam kasus saya, saya menggunakan fabric dalam modul "CommonLib" yang ditambahkan sebagai dependensi di semua modul lain (termasuk aplikasi). Jadi, saya menambahkan apply plugin: 'io.fabric'setelah buildscript {}blok. Jadi, saya menempatkan dua plugin bersama:

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

Dan masalah terpecahkan!

Rahul Rastogi
sumber
1

Pastikan untuk menambahkan apply plugin: 'io.fabric'proyek aplikasi Anda build.gradle. Dalam kasus saya, saya memiliki kesamaan build.gradledengan apply plugin: 'io.fabric'. Memindahkannya ke proyek aplikasi memecahkan masalah.

Yuriy Yunikov
sumber
0

Jika ini membantu orang lain, saya mengalami masalah serupa saat mengupgrade Crashlytics ke Fabric. Dalam kasus saya, plugin meninggalkan 2 baris dari Crashlytics yang perlu saya hapus secara manual sebelum berfungsi.

Di file gradle, di bawah dependensi buildscript, saya harus menghapus secara manual:

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

Juga, di bawah ketergantungan, saya harus menghapus secara manual:

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

Periksa apakah crashlytics dinonaktifkan dalam file build.gradle

    debug {
        ext.enableCrashlytics = false
    }

Sebagai gantinya gunakan

    debug {
        ext.enableCrashlytics = true
    }
Sagar
sumber
0

Mungkin saya terlambat membalas. Tetapi ini bisa terjadi dari satu alasan lagi selain dari semua jawaban di atas

Jika Anda ketinggalan menambahkan

apply plugin:'io.fabric'

Ini mungkin tampak aneh tetapi ini akan menghasilkan masalah yang sama

Ini secara default ditambahkan oleh fabric ketika kita mendaftar dan menambahkan kode dari jendela Fabric Menggunakan IDE tetapi secara tidak sengaja dapat dihapus.

Kumar Utkarsh
sumber
0

Menghapus ikon aplikasi tetap Crashylitics, whaaat?

Saya menyelesaikan semuanya berdasarkan tutorial orientasi, menggunakan versi terbaru, dll.

Hanya membuang waktu satu jam untuk mencoba memikirkan hal ini. Ternyata seseorang berpikir itu ide yang baik untuk membaca nama paket dari ikon aplikasi daripada context.packageNamemendapatkan sumber daya aplikasi mengingat konteks. Itu dilakukan dengan metode ini:

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

Hal ini jelas pukulan jika Anda kebetulan menggunakan sebuah ikon yang tidak dalam APK, misalnya: android:icon="@android:drawable/sym_def_app_icon". Mungkin itu ide yang bagus pada saat itu, bertanya-tanya bug aneh apa yang mereka coba atasi ?!

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

Tambahkan itu ke dalam AndroidManifest.xml.

Dholakiya Madhuri
sumber
Jadi solusi Anda untuk memperbaiki masalah ini adalah dengan menonaktifkan Crashlytics sepenuhnya?
JJJ