Como posso corrigir essa CrashlyticsMissingDependencyException?

104

Tenho usado o Crashlytics (integração com o Fabric) mais recente há algum tempo. Mas, recentemente, encontrei o seguinte erro de travamento devido à ausência de dependência, embora não tenha alterado nada nas configurações do Crashlytics.

qualquer ideia?

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
fonte
Conforme mencionado nas respostas abaixo, estamos trabalhando em uma correção, mas usar o 1.14.4 funcionará enquanto continuamos a chegar ao fundo disso.
Mike Bonnell
Acabei de tentar desinstalar e instalar o Fabrics for Android Studio casais. AS precisa reiniciar algum tempo para recuperar sua sanidade.
Robert,
use este link docs.fabric.io/android/crashlytics/…
Shervin Gharib

Respostas:

22

A única solução alternativa por enquanto, se você realmente precisar publicar seu aplicativo (como eu), é alterar os números da versão dinâmica para estática:

[...]

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

[...]

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

[...]

EDITAR:

uma versão atualizada do Fabric SDK foi publicada; você pode obtê-lo alterando a linha para esta:

classpath 'io.fabric.tools:gradle:1.26.1'
gw0
fonte
1
Não tenho certeza do que você quer dizer, mas eles são dois repositórios maven idênticos: https://maven.fabric.io/repoehttps://maven.fabric.io/public
gw0
1
Aqui estão as versões disponíveis: s3.amazonaws.com/fabric-artifacts/public/io/fabric/tools/gradle/…
José Antonio Postigo
96

Eu adicionei os seguintes códigos antes de instalar o Fabric / Crashlytics:

debug {
    ext.enableCrashlytics = false
}

Removê-lo antes da primeira execução com o Crashlytics resolveu o problema. O problema não ocorre mais após a primeira execução.

i906
fonte
2
Estou tendo o mesmo problema com 1.20.1 e 2.5.2@aar. Mas não posso usar esta solução alternativa em CI, pois o espaço de trabalho de construção é redefinido para cada construção :(
Hieu Rocker
1
Estou trabalhando com os engenheiros da Fabric. Fusos horários diferentes são uma merda e já demoramos quase 2 semanas. Ainda sem solução ainda. Mas você pode tentar uma solução alternativa no CI: ./gradlew clean assemble, então ./gradlew assemble, o apk gerado pelo segundo comando funcionará normalmente.
Hieu Rocker
3
@ThuyTrinh descobriu que é por causa de dataBinding = true. O Crashlytics lançou uma solução para isso: twittercommunity.com/t/…
Rocker
1
Plugin de malha atualizado hoje e recebo este erro. A solução alternativa ajuda, mas não funciona nas execuções subsequentes. Portanto, tenho que comentar esta linha para correr.
Ernest
1
Não está funcionando para mim emcom.crashlytics.sdk.android:crashlytics:2.6.8@aar
Tas
27

Eu tinha isso comentado no gradle

apply plugin: 'io.fabric'

precisava descomentar

Ou se você não tem, adicione!

MobileMon
fonte
14

Parece especificar a versão do plugin como:

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

pega 1.15.1, que tem o problema.

Especificar maior e menor para anterior 1.14parece estar estável:

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

Eu tive o mesmo problema após atualizar o plugin. para resolver a necessidade de remover do AndroidManifest.xml:

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

e adicione a fabric.properties:

apiSecret=API_SECRET_KEY
apiKey=YOUR_SECRET_KEY

ATUALIZAR:

Agora, você deve usar:

  <meta-data
      android:name="io.fabric.ApiKey"
      android:value="API_KEY" />
Sergei K
fonte
1
Suas diretrizes de integração pareciam desatualizadas. Aparentemente, não é mais necessário fabric.properties, mas sim <meta-data android:name="io.fabric.ApiKey" android:value="YOUR_API_KEY"/>no arquivo AM. O nome foi alterado de "com.crashlytics.ApiKey" para "io.fabric.ApiKey".
Thuy Trinh
1
Sim, você está certo. É importante. Eu atualizei minha postagem. Obrigado.
Sergei K
13

Se você estiver usando a função desativar durante a depuração, conforme mostrado

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

O que acontece quando você atualiza a versão do crashlytics é que

Fabric.with(this, crashlyticsKit); 

é voltado para

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

Portanto, certifique-se de alterar de volta para crashlyticskit. Se você estiver fazendo isso corretamente e o erro ainda aparecer, certifique-se de ter

debug {

      ext.enableCrashlytics = false
 }

sob android {buildtypes {}}

Sidhanth Sur
fonte
11

Mike do Crashlytics aqui. Enviamos uma versão atualizada - 1.15.2 - hoje cedo que inclui uma correção para esse comportamento. Se você executar:

./gradlew assemble --refresh-dependencies

que irá trazer a versão mais recente. Você também pode ver mais detalhes sobre a correção aqui.

Mike Bonnell
fonte
1
Não estou usando a integração do Fabric apenas pelo Crashlytics e também estou recebendo CrashlyticsMissingDependencyException. Como eu poderia lidar com isso?
bogumil de
@bogumil você pode incluir parte do seu build.gradle?
Mike Bonnell
2
@MikeB Depois de algum tempo, novamente recebo CrashlyticsMissingDependencyException. Estou usando: dependencies {classpath 'com.android.tools.build:gradle:1.2.3' classpath 'com.crashlytics.tools.gradle: crashlytics-gradle: 1.16.0'} e compilar 'com.crashlytics.android : crashlytics: 1.1.13 '
bogumil
Hmm, muito estranho @bogumil. A execução de dependências de atualização ajuda?
Mike Bonnell
@MikeB Isso não ajuda. Enviei também um email para support @ e posso fornecer mais detalhes se necessário.
bogumil
5

Correção para mim da fonte oficial

Desativar Crashlytics para Debug Builds

Se você não precisa de relatórios de falhas do Crashlytics ou distribuição beta para compilações de depuração, pode acelerar com segurança suas compilações de depuração desativando o plug-in totalmente com estas duas etapas:

Primeiro, adicione ao build.gradle do seu aplicativo:

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

Em seguida, desative o kit Crashlytics no tempo de execução. Caso contrário, o kit Crashlytics gerará o seguinte erro:

com.crashlytics.android.core.CrashlyticsMissingDependencyException:

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

Você pode desativar o kit em tempo de execução para compilações de depuração apenas com o seguinte código:

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

O problema também ocorre se você incluir acidentalmente o Crashlytics BuildConfig - muito fácil de fazer com as importações automáticas do Android Studio / IntelliJ.

Eu importei

import com.crashlytics.android.core.BuildConfig;

Em vez do meu

import <package_name>.BuildConfig;

nmw
fonte
3

No meu caso, eu estava usando o fabric em um módulo "CommonLib" que foi adicionado como uma dependência em todos os outros módulos (incluindo app). Então, eu adicionei apply plugin: 'io.fabric'após o buildscript {}bloco. Então, coloquei dois plug-ins juntos:

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

E o problema foi resolvido!

Rahul Rastogi
fonte
1

Certifique-se de adicionar apply plugin: 'io.fabric'em seu projeto de aplicativo build.gradle. No meu caso, eu tinha uma coisa em comum build.gradlecom apply plugin: 'io.fabric'. Movê-lo para o projeto do aplicativo resolveu o problema.

Yuriy Yunikov
fonte
0

Caso isso ajude outra pessoa, tive um problema semelhante ao atualizar o Crashlytics para o Fabric. No meu caso, o plug-in deixou 2 linhas do Crashlytics que eu precisava remover manualmente antes de funcionar.

No arquivo gradle, nas dependências de buildscript, tive que remover manualmente:

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

Além disso, nas dependências, tive que remover manualmente:

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

Verifique se crashlytics está desabilitado no arquivo build.gradle

    debug {
        ext.enableCrashlytics = false
    }

Em vez de usar

    debug {
        ext.enableCrashlytics = true
    }
Sagar
fonte
0

Talvez eu esteja atrasado para responder. Mas isso pode acontecer por mais um motivo além de todas as respostas acima

Se você perder adicionar

apply plugin:'io.fabric'

Isso pode parecer estranho, mas resultará no mesmo problema

Isso é adicionado por padrão pelo fabric quando nos inscrevemos e adicionamos código da janela do Fabric usando IDE, mas acidentalmente pode ser excluído.

Kumar Utkarsh
fonte
0

Removendo o ícone do aplicativo corrigiu Crashylitics, o quê?

Eu fiz tudo com base no tutorial de integração, usando as versões mais recentes, etc.

Só perdi uma hora tentando descobrir isso. Acontece que alguém achou uma boa ideia ler o nome do pacote do ícone do aplicativo em vez de context.packageNameobter os recursos do aplicativo em um contexto. É feito neste método:

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

Isto, obviamente, explode, se acontecer de você usar um ícone que não está dentro da APK, por exemplo: android:icon="@android:drawable/sym_def_app_icon". Provavelmente foi uma boa ideia na época, imagine qual bug estranho eles estavam tentando contornar ?!

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

Adicione isso em AndroidManifest.xml.

Dholakiya Madhuri
fonte
Então, sua solução para corrigir o problema é desativar completamente o Crashlytics?
JJJ