ฉันจะแก้ไข CrashlyticsMissingDependencyException นี้ได้อย่างไร


104

ฉันใช้ Crashlytics (การผสานรวม Fabric) ล่าสุดมาระยะหนึ่งแล้ว แต่เมื่อเร็ว ๆ นี้ฉันพบข้อผิดพลาดข้อขัดข้องดังต่อไปนี้เนื่องจากไม่มีการอ้างอิงแม้ว่าฉันจะไม่ได้เปลี่ยนแปลงอะไรเกี่ยวกับการกำหนดค่า Crashlytics

มีความคิดอย่างไร

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)

ดังที่ได้กล่าวไว้ในคำตอบด้านล่างเรากำลังดำเนินการแก้ไข แต่การใช้ 1.14.4 จะได้ผลในขณะที่เราไปที่ด้านล่างของสิ่งนี้ต่อไป
Mike Bonnell

ฉันแค่ลองถอนการติดตั้งและติดตั้ง Fabrics for Android Studio เวลาคู่รัก AS จำเป็นต้องรีสตาร์ทสองสามครั้งเพื่อให้สติของเขากลับคืนมา
Robert

ใช้ลิงค์นี้docs.fabric.io/android/crashlytics/…
Shervin Gharib

คำตอบ:


22

วิธีแก้ปัญหาเดียวสำหรับตอนนี้หากคุณต้องการเผยแพร่แอปของคุณจริงๆ (เช่นฉัน) คือการเปลี่ยนหมายเลขเวอร์ชันไดนามิกเป็นแบบคงที่:

[...]

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

[...]

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

[...]

แก้ไข:

มีการเผยแพร่ Fabric SDK เวอร์ชันอัปเดตแล้ว คุณสามารถรับได้โดยเปลี่ยนบรรทัดเป็น:

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

1
ฉันไม่แน่ใจว่าคุณหมายถึงอะไร แต่มีสอง repos maven ที่เหมือนกัน: https://maven.fabric.io/repoและhttps://maven.fabric.io/public
gw0

1
รุ่นที่มีจำหน่าย ได้แก่s3.amazonaws.com/fabric-artifacts/public/io/fabric/tools/gradle/…
José Antonio Postigo

96

ฉันได้เพิ่มรหัสต่อไปนี้ก่อนที่จะติดตั้ง Fabric / Crashlytics:

debug {
    ext.enableCrashlytics = false
}

การนำออกก่อนการรันครั้งแรกด้วย Crashlytics ช่วยแก้ปัญหาได้ ปัญหาจะไม่เกิดขึ้นอีกต่อไปหลังจากการรันครั้งแรก


2
ฉันได้รับปัญหาเดียวกันกับ 1.20.1 และ 2.5.2@aar แต่ฉันไม่สามารถใช้วิธีแก้ปัญหานี้กับ CI ได้เนื่องจากพื้นที่ทำงานของบิวด์ถูกรีเซ็ตสำหรับทุกบิลด์ :(
Hieu Rocker

1
ฉันทำงานร่วมกับวิศวกรที่ Fabric เขตเวลาที่แตกต่างกันดูดและใช้เวลาเกือบ 2 สัปดาห์แล้ว ยังคงไม่มีทางแก้ไข แต่คุณสามารถลองวิธีแก้ปัญหาใน CI: ./gradlew clean แอสเซมบลีจากนั้น. /gradlew รวบรวม apk ที่สร้างโดยคำสั่งที่สองจะทำงานตามปกติ
Hieu Rocker

3
@ThuyTrinh ปรากฎว่าเป็นเพราะ dataBinding = true Crashlytics ได้เปิดตัวการแก้ไขแล้ว: twittercommunity.com/t/…
Hieu Rocker

1
อัปเดตปลั๊กอิน fabric วันนี้และได้รับข้อผิดพลาดนี้ วิธีแก้ปัญหาช่วยได้ แต่ใช้ไม่ได้กับการรันในภายหลัง ผมจึงต้องแสดงความคิดเห็นบรรทัดนี้สำหรับการวิ่ง
เออร์เนสต์

1
มันไม่ทำงานสำหรับฉันในcom.crashlytics.sdk.android:crashlytics:2.6.8@aar
Tas

27

ฉันได้แสดงความคิดเห็นนี้ในการไล่ระดับสี

apply plugin: 'io.fabric'

จำเป็นต้องยกเลิกการแสดงความคิดเห็น

หรือถ้ายังไม่มีก็เพิ่ม!


14

ดูเหมือนว่าการระบุเวอร์ชันปลั๊กอินเป็น:

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

หยิบ 1.15.1 ซึ่งมีปัญหา

การระบุหลักและรองไปก่อนหน้า1.14ดูเหมือนจะเสถียร:

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

13

ฉันมีปัญหาเดียวกันหลังจากอัปเดตปลั๊กอิน ในการแก้ปัญหาต้องลบออกจาก AndroidManifest.xml:

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

และเพิ่มลงใน fabric.properties:

apiSecret=API_SECRET_KEY
apiKey=YOUR_SECRET_KEY

อัพเดท:

ตอนนี้คุณต้องใช้:

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

1
แนวทางการผสานรวมของพวกเขาดูเหมือนจะล้าสมัย ดูเหมือนว่าจะไม่ต้องการ fabric.properties อีกต่อไป แต่ต้อง<meta-data android:name="io.fabric.ApiKey" android:value="YOUR_API_KEY"/>อยู่ในไฟล์ AM เปลี่ยนชื่อจาก "com.crashlytics.ApiKey" เป็น "io.fabric.ApiKey"
Thuy Trinh

1
ใช่คุณถูก. มันสำคัญ. ฉันอัปเดตโพสต์ของฉัน ขอบคุณ.
Sergei K

13

หากคุณกำลังใช้ฟังก์ชันปิดการใช้งานระหว่างการดีบักดังที่แสดง

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

จะเกิดอะไรขึ้นเมื่อคุณอัปเดตเวอร์ชันของ crashlytics นั้น

Fabric.with(this, crashlyticsKit); 

หันไป

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

ดังนั้นอย่าลืมเปลี่ยนกลับเป็น crashlyticskit หากคุณทำสิ่งนี้อย่างถูกต้องและข้อผิดพลาดยังคงปรากฏขึ้นให้ตรวจสอบว่าคุณมี

debug {

      ext.enableCrashlytics = false
 }

ภายใต้ Android {buildtypes {}}


11

Mike จาก Crashlytics ที่นี่ เราจัดส่งเวอร์ชันที่อัปเดต - 1.15.2 - ก่อนหน้านี้ในวันนี้ซึ่งมีการแก้ไขสำหรับลักษณะการทำงานนี้ ถ้าคุณวิ่ง:

./gradlew assemble --refresh-dependencies

ที่จะดึงมาในเวอร์ชันล่าสุด คุณยังสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับการแก้ไขได้ที่นี่


1
ฉันไม่ได้ใช้การรวม Fabric โดย Crashlytics เท่านั้นและฉันยังได้รับ CrashlyticsMissingDependencyException ฉันจะจัดการกับมันได้อย่างไร?
bogumil

@bogumil คุณสามารถรวมส่วนหนึ่งของ build.gradle ของคุณได้หรือไม่?
Mike Bonnell

2
@MikeB หลังจากนั้นไม่นานฉันได้รับ CrashlyticsMissingDependencyException อีกครั้ง ฉันใช้: dependencies {classpath 'com.android.tools.build:gradle:1.2.3' classpath 'com.crashlytics.tools.gradle: crashlytics-gradle: 1.16.0'} และคอมไพล์ 'com.crashlytics.android : crashlytics: 1.1.13 '
bogumil

อืมแปลกมาก @bogumil การเรียกใช้การอ้างอิงการรีเฟรชช่วยได้หรือไม่?
Mike Bonnell

@MikeB มันไม่ช่วย ฉันส่งอีเมลไปที่ support @ ด้วยและสามารถส่งรายละเอียดเพิ่มเติมได้หากจำเป็น
bogumil

5

แก้ไขให้ฉันจากแหล่งข้อมูลอย่างเป็นทางการ

ปิดใช้งาน Crashlytics สำหรับ Debug Builds

หากคุณไม่ต้องการการรายงานข้อขัดข้องของ Crashlytics หรือการแจกจ่ายเบต้าสำหรับการสร้างการแก้ไขข้อบกพร่องคุณสามารถเร่งความเร็วในการแก้ไขข้อบกพร่องของคุณได้อย่างปลอดภัยโดยปิดใช้งานปลั๊กอินทั้งหมดด้วยสองขั้นตอนต่อไปนี้:

ขั้นแรกให้เพิ่มสิ่งนี้ลงใน build.gradle ของแอปของคุณ:

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

จากนั้นปิดใช้งานชุด Crashlytics ในขณะรันไทม์ มิฉะนั้นชุด Crashlytics จะทำให้เกิดข้อผิดพลาดต่อไปนี้:

com.crashlytics.android.core.CrashlyticsMissingDependencyException:

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

คุณสามารถปิดใช้งานชุดที่รันไทม์สำหรับการดีบักบิวด์ด้วยรหัสต่อไปนี้เท่านั้น:

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

ปัญหานี้ยังเกิดขึ้นหากคุณรวม Crashlytics BuildConfig โดยไม่ได้ตั้งใจซึ่งทำได้ง่ายมากกับการนำเข้าอัตโนมัติของ Android Studio / IntelliJ

ฉันนำเข้า

import com.crashlytics.android.core.BuildConfig;

แทนที่จะเป็นของฉันเอง

import <package_name>.BuildConfig;


4

dataBinding = trueสำหรับฉันมันเป็นเพราะ การอัปเกรดปลั๊กอิน fabric gradle เป็น 1.21.0 แก้ไขปัญหา: https://twittercommunity.com/t/fabric-gradle-plugin-1-21-0-add-support-for-android-databinding-true/57474


จุดดี - นี่เป็นข้อผิดพลาดรุ่นล่าสุด การใช้ 1.21.0 หรือ 1.21.1 จะช่วยได้
Mike Bonnell

3

ในกรณีของฉันฉันใช้ fabric ในโมดูล "CommonLib" ที่ถูกเพิ่มให้เป็นการอ้างอิงในโมดูลอื่น ๆ ทั้งหมด (รวมถึงแอป) ดังนั้นฉันได้เพิ่มapply plugin: 'io.fabric'หลังbuildscript {}บล็อก ดังนั้นฉันจึงวางปลั๊กอินสองตัวไว้ด้วยกัน:

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

และปัญหาได้รับการแก้ไขแล้ว!


1

ตรวจสอบเพื่อเพิ่มลงในโครงการใบสมัครของคุณapply plugin: 'io.fabric' build.gradleในกรณีของฉันฉันมีปัญหาร่วมกันbuild.gradleกับapply plugin: 'io.fabric'. การย้ายไปยังโครงการแอปพลิเคชันช่วยแก้ปัญหาได้


0

ในกรณีนี้ช่วยคนอื่นได้ฉันมีปัญหาคล้ายกันนี้เมื่ออัปเกรด Crashlytics เป็น Fabric ในกรณีของฉันปลั๊กอินเหลือ 2 บรรทัดจาก Crashlytics ซึ่งฉันต้องลบด้วยตนเองก่อนจึงจะใช้งานได้

ในไฟล์ gradle ภายใต้การพึ่งพา buildscript ฉันต้องลบด้วยตนเอง:

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

นอกจากนี้ภายใต้การอ้างอิงฉันต้องลบด้วยตนเอง:

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

0

ตรวจสอบว่า Crashlytics ถูกปิดใช้งานในไฟล์ build.gradle หรือไม่

    debug {
        ext.enableCrashlytics = false
    }

ใช้แทน

    debug {
        ext.enableCrashlytics = true
    }

0

ฉันอาจจะตอบช้าไป แต่สิ่งนี้สามารถเกิดขึ้นได้จากอีกเหตุผลหนึ่งนอกเหนือจากคำตอบทั้งหมดข้างต้น

หากคุณพลาดที่จะเพิ่ม

apply plugin:'io.fabric'

สิ่งนี้อาจดูแปลก แต่จะส่งผลให้เกิดปัญหาเดียวกัน

โดยค่าเริ่มต้นจะเพิ่มโดย fabric เมื่อเราสมัครและเพิ่มรหัสจากหน้าต่าง Fabric โดยใช้ IDE แต่บังเอิญมันสามารถลบได้


0

การลบไอคอนแอปพลิเคชันแก้ไข Crashylitics, whaaat?

ฉันทำทุกอย่างตามบทช่วยสอนการเริ่มต้นใช้งานเวอร์ชันล่าสุด ฯลฯ

เสียเวลาเพียงหนึ่งชั่วโมงในการพยายามคิดออก ปรากฎว่ามีคนคิดว่าควรอ่านชื่อแพ็กเกจของไอคอนแอปพลิเคชันแทนที่จะcontext.packageNameรับทรัพยากรของแอปพลิเคชันตามบริบท ทำได้ด้วยวิธีนี้:

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

นี้เห็นได้ชัดพัดขึ้นหากเกิดขึ้นจะใช้ไอคอนที่ไม่ได้อยู่ภายในเอพีเค, android:icon="@android:drawable/sym_def_app_icon"ตัวอย่างเช่น: อาจเป็นความคิดที่ดีในเวลานั้นสงสัยว่าพวกเขาพยายามแก้ไขข้อผิดพลาดอะไรบ้าง!


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

เพิ่มลงในAndroidManifest.xml.


ดังนั้นวิธีแก้ปัญหาของคุณคือปิดการใช้งาน Crashlytics อย่างสมบูรณ์หรือไม่?
JJJ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.