Fabric Debug Craslytic 报告:注册,缺少构建 ID,应用插件:io.fabric

Posted

技术标签:

【中文标题】Fabric Debug Craslytic 报告:注册,缺少构建 ID,应用插件:io.fabric【英文标题】:Fabric Debug Craslytic Reports : Signup, build Id missing, apply plugin : io.fabric 【发布时间】:2019-07-09 10:48:48 【问题描述】:

我们正在编写一个 android 应用程序并尝试在我们的应用程序中实现 Crashlytics。

我们有不同类型的问题。 我们使用的版本: 安卓工作室版本: 3.3

Gradle 版本: 类路径'com.android.tools.build:gradle:3.3.1'

插件: Fabric for Android studio v4.3.0

实施: 实现('com.crashlytics.sdk.android:crashlytics:2.9.9')传递=真 实现('io.fabric.sdk.android:fabric:1.4.0@aar')传递=真

gradle-wrapper.properties: distributionUrl=https://services.gradle.org/distributions/gradle-5.2.1-all.zip

第一个问题:

当我们实施 Crashlytics 时,您知道开发人员有 3 个步骤。我们不能跳过 2,3.steps。因为我们还没有编译我们的应用程序。我们有两个主要错误:

错误 1:

此应用依赖 Crashlytics。请通过https://fabric.io/sign_up注册访问,

错误 2:

E/CrashlyticsCore: The Crashlytics build ID is missing.This occurs when 
Crashlytics tooling is absent from your app's build configuration.
Please review Crashlytics onboarding instructions and ensure you have a valid Crashlytics account.

因此,我们必须禁用“调试模块”才能完成 Crashlytic 的实施。

Crashlytics crashlyticsKit = new Crashlytics.Builder()
        .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
        .build();

Fabric.with(this, crashlyticsKit);  // Tod from Fabric suggested in ***

实施完毕。

但我们不想这样做。因为,当我们发生崩溃时,它不会向 Crashlytics 或 Firebase 报告任何内容。我们还希望调试 mod 的崩溃。

当我们删除 -> ....disabled(BuildConfig.DEBUG) - 它再次显示:错误 1,错误 2。

第二个问题:

在 gradle 中;应用插件:'io.fabric',我们做了注释行,当我们删除 cmets 行时,我们有以下错误:

错误 3:

WARNING: API 'variant.getExternalNativeBuildTasks()' is obsolete and has been replaced with 'variant.getExternalNativeBuildProviders()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
To determine what is calling variant.getExternalNativeBuildTasks(), use -Pandroid.debug.obsoleteApi=true on the command line to display a stack trace.
Affected Modules: app

当我们搜索它时,这个错误与新的 android studio gradle 有关。所以我们需要再次添加注释行“apply plugin: fabric.io”。

对此没有好的解决方案。

要运行我们无法删除的应用程序:

new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build():(由于Error1 Error2)

所以我们尝试启用不同的报告方式:

在此之前我们尝试添加什么?

1.在 gradle 中启用:

buildTypes 
    debug 
        manifestPlaceholders = [crashlyticsEnabled: true]
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    
    release 
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        manifestPlaceholders = [crashlyticsEnabled: false]

    

2。在清单中启用

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

3.在 ADB 中启用

  adb shell setprop log.tag.Fabric DEBUG
  adb shell setprop log.tag.CrashlyticsCore DEBUG

但是,Crashlytics 或 Firebase 仍然没有收到任何调试崩溃报告。

我们期待您的解决方案。

【问题讨论】:

我遇到了类似的问题。你的应用有几种风格吗? 我们通过将 android.debug.obsoleteApi=true 添加到 gradle.properties 来解决。面料需要开发新的gradle。他们有错误。这将允许所有旧方法和变量。当 fabric 更新它时,不要忘记将其删除。 我设法在没有添加您建议的情况下修复它。我会解释几个作为答案。 为什么要为调试版本指定 Proguard 【参考方案1】:

我设法解决了这个问题,而无需在 gradle.properties 中添加 android.debug.obsoleteApi=true

我基本上使用适当的风味配置和提供的 google-services.json 文件将 3 种风味连接到不同的 Firebase 项目。

与我的相比,您的 gradle 文件缺少的是:

dependencies 
    classpath 'com.android.tools.build:gradle:3.2.1'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    classpath "com.google.gms:google-services:$google_services_version" // google-services plugin

    classpath "io.fabric.tools:gradle:$fabric_tools_version"


apply plugin: "io.fabric"

最后:implementation "com.google.firebase:firebase-crash:16.2.1"

我知道 Fabric 今年将关闭,但通过以这种方式运行应用程序,它们可以毫无问题地连接到 Firebase 控制台。

关于flavor的配置,我下载了三个不同的json文件(我有3个flavor)并添加到了每个flavor的根目录下。例如:

flavor1:
assets
java
res
AndroidManifest
google-services.json (for flavor1)

flavor2:
assets
java
res
AndroidManifest
google-services.json (for flavor2)

就是这样。希望这对某人有所帮助。

编辑 因此,你们可能已经知道,Fabric 正在关闭,Firebase Crashlytics 已准备就绪,因此不推荐使用此答案。 请检查here,以便您可以成功更新您的应用程序并避免奇怪的行为。

【讨论】:

其实我认为fabric解决了这个错误。我们从代码中删除了 obsolete=true 。同样对于不同的口味,您不需要添加分隔的 google-services.json。您可以将所有这些合并到一个 google-service.json 文件中【参考方案2】:

如果您为构建变体设置了ext.enableCrashlytics = false,但仍尝试在应用初始化代码中调用Fabric.with(context, Crashlytics()),也会发生这种情况。 ext.enableCrashlytics = false 禁用构建插件(我为使调试构建更快而进行的优化),但是构建 ID 当然会丢失。

【讨论】:

【参考方案3】:

今天,我从 Fabric Crashlytics 迁移到 Firebase Crashlytics,遇到了一个致命错误,让我无法继续前进。我所做的是这样的: 在 app-> build.gradle:

apply plugin: 'io.fabric'
dependencies 
 implementation "com.google.firebase:firebase-core:17.2.0"
// Add dependency
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'

一般 build.gradle:

buildscript 

repositories 

    maven 
        url 'https://maven.fabric.io/public'
    

dependencies 
    classpath 'io.fabric.tools:gradle:1.31.2'  // Crashlytics plugin

当然也可以从 Firebase 下载 json 文件并将其插入到 app 文件夹中。

完成这些简单步骤后,我在启动应用程序时收到此错误

缺少 Crashlytics 构建 ID。当 Crashlytics 您的应用的构建配置中没有工具。请查阅 Crashlytics 入职说明并确保您拥有有效的 Crashlytics 帐户。

我去检查了没有任何代码可以调用旧的 Fabric 方法,事实上我发现在 app-> build.gradle 我有这个:

buildTypes 

    debug 
        minifyEnabled false
        debuggable true
        **ext.enableCrashlytics = false**
        ext.alwaysUpdateBuildId = false
        

ext.enableCrashlytics = false 当然,这是一种引用旧 Fabric 的方法,所以我删除了这行,一切正常!我希望能帮助别人解决这个问题

【讨论】:

谢谢!工作。 这行ext.enableCrashlytics = false 是加速本地调试构建所必需的...... 是的,可能,但在这种情况下,它属于旧结构,迁移后会出现问题。他们可能不再有这种方法了。【参考方案4】:

只需在你的 build.gradle (app) 中设置 apply plugin: 'io.fabric'

【讨论】:

【参考方案5】:

就我而言,我缺少 Crashlytics 插件:

apply plugin: 'com.google.firebase.crashlytics'

将该行放在模块的 build.gradle 文件的顶部,例如

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'

【讨论】:

【参考方案6】:

只需在您的 build.gradle(项目)中添加这一行:

 classpath 'com.google.firebase:firebase-crashlytics-gradle:2.2.0'

以及您构建 Gradle(应用程序)中的这个插件:

apply plugin: 'com.google.firebase.crashlytics'

【讨论】:

【参考方案7】:

我的应用 (Android Studio 3.4.1) 中遇到了同样的问题

我修复了连接到 Fabric 插件的槽。创建一个帐户并将我的应用程序链接到它。

【讨论】:

【参考方案8】:

就我而言,我只是将implementation 'com.google.firebase:firebase-core:16.0.9' 更新为implementation 'com.google.firebase:firebase-core:17.0.1' 并将apply plugin: 'io.fabric' 添加到我的应用程序级别的gradle 中。这为我解决了错误 2

【讨论】:

【参考方案9】:

我在从 Fabric Crashlytics 迁移到 Firebase Crashlytics 时遇到了同样的问题,以下步骤为我解决了这个问题

Clean 你的项目 更新google-services.json文件

【讨论】:

【参考方案10】:

如果您从 Fabric 迁移到 Firebase,请确保您已致电:

FirebaseApp.initializeApp(this)

在您的应用程序onCreate()

不再需要与 Fabric 有任何关系,只需遵循以下指导即可:

https://firebase.google.com/docs/crashlytics/get-started?platform=android

【讨论】:

不再需要显式初始化 Crashlytics【参考方案11】:

就我而言,我有两个使用不同版本的 FireBase Crashlytics 的模块。

【讨论】:

【参考方案12】:

就我而言,我错过了这一行:apply plugin: 'com.google.gms.google-services'

供参考,https://rnfirebase.io/crashlytics/android-setup

【讨论】:

【参考方案13】:

我在这里遇到了同样的问题,我通过将 Fabric 添加到 Gradle 来解决它

这是我的项目 Gradle 文件:

        google()
        jcenter()
        maven  url 'https://jitpack.io' 
        maven  url 'https://maven.fabric.io/public' 

    
    dependencies 
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'io.fabric.tools:gradle:1.+'
        classpath 'com.google.gms:google-services:4.3.3'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
     

【讨论】:

以上是关于Fabric Debug Craslytic 报告:注册,缺少构建 ID,应用插件:io.fabric的主要内容,如果未能解决你的问题,请参考以下文章

Service Fabric:找不到 pkg\Debug

Crashlytics 没有向我的 Fabric 仪表板发送崩溃报告?

Crashlytics 没有向我的 Fabric 仪表板发送崩溃报告?

iOS Firebase + Fabric Beta Crashylitics 未报告问题

Crashlytics vs Fabric vs Firebase 崩溃报告——我迷路了

崩溃报告未进入 Crashlytics / fabric。显示警告:“看起来我们缺少 dSYM 来处理以下版本的崩溃。”