Как я могу исправить это исключение 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 будет работать, пока мы продолжаем разбираться в этом.
Майк Боннелл,
Я просто пытаюсь удалить и установить Fabrics для пары Android Studio. КАК нужно перезапустить пару раз, чтобы вернуть его рассудок.
Роберт
используйте эту ссылку docs.fabric.io/android/crashlytics/…
Шервин Гариб

Ответы:

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'
gw0
источник
1
Я не уверен, что вы имеете в виду, но это два идентичных репозитория maven: https://maven.fabric.io/repoиhttps://maven.fabric.io/public
gw0
1
Вот доступные версии: s3.amazonaws.com/fabric-artifacts/public/io/fabric/tools/gradle/…
Хосе Антонио Постиго,
96

Я добавил следующие коды до того, как фактически установил Fabric / Crashlytics:

debug {
    ext.enableCrashlytics = false
}

Удаление его перед первым запуском с Crashlytics решило проблему. Проблема больше не возникает после первого запуска.

i906
источник
2
У меня такая же проблема с 1.20.1 и 2.5.2@aar. Но я не могу использовать этот обходной путь для CI, так как рабочая область сборки сбрасывается для каждой сборки :(
Hieu Rocker
1
Я работаю с инженерами Fabric. Разные часовые пояса - отстой, и это заняло у нас уже почти 2 недели. По-прежнему нет решения. Но вы можете попробовать обходной путь на CI: ./gradlew clean assembly, затем ./gradlew Assembly, apk, созданный второй командой, будет работать как обычно.
Hieu Rocker
3
@ThuyTrinh оказался из-за dataBinding = true. Crashlytics выпустила исправление для этого: twittercommunity.com/t/…
Hieu Rocker
1
Обновил плагин ткани сегодня и получил эту ошибку. Обходной путь помогает, но не работает при последующих запусках. Поэтому я должен прокомментировать эту строку для запуска.
Эрнест
1
Это не работает для меня вcom.crashlytics.sdk.android:crashlytics:2.6.8@aar
Tas
27

Я закомментировал это в градиенте

apply plugin: 'io.fabric'

нужно раскомментировать это

Или, если у вас его нет, добавьте!

MobileMon
источник
14

Похоже на указание версии плагина как:

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

подхватывает 1.15.1, в котором есть проблема.

Указание major и minor к предыдущему 1.14кажется стабильным:

classpath 'io.fabric.tools:gradle:1.14.+'
Khaleesi
источник
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

Майк из Crashlytics здесь. Ранее сегодня мы отправили обновленную версию 1.15.2, которая включает исправление этого поведения. Если вы запустите:

./gradlew assemble --refresh-dependencies

что потянет в последней версии. Вы также можете увидеть более подробную информацию об исправлении здесь.

Майк Боннелл
источник
1
Я не использую интеграцию Fabric только самим Crashlytics, и я также получаю CrashlyticsMissingDependencyException. Как я мог с этим справиться?
bogumil
@bogumil, можете ли вы включить часть вашего build.gradle?
Майк Боннелл
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. Помогает ли запуск обновленных зависимостей?
Майк Боннелл
@MikeB Это не помогает. Я также отправил электронное письмо в службу поддержки @, и при необходимости могу предоставить более подробную информацию.
bogumil
5

Исправить для меня Из официального источника

Отключить Crashlytics для отладочных сборок

Если вам не нужны отчеты о сбоях 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;

nmw
источник
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 поможет.
Майк Боннелл
3

В моем случае я использовал структуру в модуле «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

Проверьте, отключена ли функция сбоев в файле build.gradle

    debug {
        ext.enableCrashlytics = false
    }

Вместо этого используйте

    debug {
        ext.enableCrashlytics = true
    }
Сагар
источник
0

Возможно, я опаздываю с ответом. Но это может произойти по еще одной причине, помимо всех приведенных выше ответов.

Если вы пропустите добавить

apply plugin:'io.fabric'

Это может показаться странным, но это приведет к той же проблеме.

Это по умолчанию добавляется фабрикой, когда мы регистрируемся и добавляем код из окна Fabric с помощью IDE, но случайно его можно удалить.

Кумар Уткарш
источник
0

Исправлено удаление значка приложения Crashylitics, дааааааааааааааааааааут?

У меня все было сделано на основе руководства по адаптации, с использованием последних версий и т. Д.

Просто потратил час на то, чтобы понять это. Оказывается, кто-то подумал, что было бы неплохо прочитать имя пакета на значке приложения, а не context.packageNameполучать ресурсы приложения с учетом контекста. Это делается таким способом:

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

Это , очевидно , взрывает если вы будете использовать значок, это не внутри APK, например: android:icon="@android:drawable/sym_def_app_icon". Вероятно, в то время это была хорошая идея, интересно, какую странную ошибку они пытались обойти ?!

TWiStErRob
источник
-1
<meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" /> 

Добавьте это в AndroidManifest.xml.

Дхолакия Мадхури
источник
Итак, ваше решение проблемы - полностью отключить Crashlytics?
JJJ