代码之家  ›  专栏  ›  技术社区  ›  Adam

火基中不出现的紧急情况

  •  5
  • Adam  · 技术社区  · 8 年前

    我的Crashlytics数据未出现在Firebase Crashlytics视图中。它确实显示“无崩溃统计”为75%,所以它似乎记录了一些数据。我还看到崩溃立即出现在Fabric和旧的Firebase崩溃报告界面中,以及DebugView中作为常规事件出现,但在Crashlytics页面的Issues部分什么都没有。我想也许我的Fabric项目没有链接到Firebase项目,但是当我尝试使用这个链接手动执行它时 https://www.fabric.io/firebase_migration/apps 它告诉我这些项目已经联系在一起了,特别是它说 Project already contains a linked app with that bundle ID and platform . 每次在androidstudio中打开应用程序时,我都会立即运行命令 adb shell setprop debug.firebase.analytics.app ie.moses.keepitlocal

    这是我的项目构建.gradle文件:

    buildscript {
        repositories {
            google()
            jcenter()
            maven {
                url 'https://maven.fabric.io/public'
            }
    
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:3.1.4'
            classpath 'com.google.gms:google-services:3.3.0'
            classpath 'io.fabric.tools:gradle:1.25.4'
        }
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
            maven {
                url 'https://maven.google.com/'
            }
    
        }
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

    apply plugin: 'com.android.application'
    apply plugin: 'io.fabric'
    
    def supportLibraryVersion = '27.1.1'
    
    android {
        compileSdkVersion 27
        defaultConfig {
            applicationId "ie.moses.keepitlocal"
            minSdkVersion 16
            targetSdkVersion 27
            versionCode 5
            versionName "0.3.1-alpha"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            debug {
                buildConfigField 'boolean', 'CRASHLYTICS', 'true'
            }
    
            release {
                buildConfigField 'boolean', 'CRASHLYTICS', 'true'
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    
    configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            if (details.requested.group == 'com.android.support') {
                // Used to prevent conflicting versions of Android support library
                // contained in other dependencies (e.g. all the firebase dependencies)
                details.useVersion supportLibraryVersion
            }
        }
    }
    
    dependencies {
        implementation files('libs/YouTubeAndroidPlayerApi.jar')
        implementation "com.android.support:appcompat-v7:$supportLibraryVersion"
        implementation "com.android.support:recyclerview-v7:$supportLibraryVersion"
        implementation "com.android.support:cardview-v7:$supportLibraryVersion"
        implementation 'com.google.firebase:firebase-core:16.0.3'
        implementation 'com.google.firebase:firebase-database:16.0.1'
        implementation 'com.google.firebase:firebase-auth:16.0.3'
        implementation 'com.google.firebase:firebase-crash:16.2.0'
        implementation 'com.crashlytics.sdk.android:crashlytics:2.9.5'
        implementation 'com.jakewharton:butterknife:8.8.1'
        annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
        implementation 'com.github.bumptech.glide:glide:4.7.1'
        annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
        implementation 'com.google.guava:guava:26.0-android'
    }
    
    apply plugin: 'com.google.gms.google-services'
    

    我使用一个按钮来强制执行以下代码的崩溃(正如我提到的,这些崩溃几乎立即出现在Fabric和旧的崩溃报告界面中,该界面已被弃用,将在2天内删除!)。下面是崩溃按钮的代码:

    Button crashButton = new Button(this);
            crashButton.setText("Crash!");
            crashButton.setOnClickListener(view -> {
                throw new IllegalStateException("you hit the crash button!");
            });
            addContentView(crashButton, new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT));
    

    编辑

    enter image description here

    每次打开androidstudio时,我还需要从Fabric插件重新安装Crashlytics库。依赖项已经存在于我的gradle文件中,但是插件似乎无法识别它们。

    Unlink an existing firebase app? ,但fabric甚至没有在我的项目中作为集成列出。

    3 回复  |  直到 6 年前
        1
  •  4
  •   user1209216    8 年前

    忘了织物吧,这不是必需的。只需遵循Firebase控制台和Firebase文档中的说明: https://firebase.google.com/docs/crashlytics/get-started#android

    不要弄乱Fabric控制台,您应该完全删除对Fabric控制台的所有调用,并按照Firebase doc所说的从零开始配置您的项目。一旦你运行了正确配置的应用程序,你就会在Firebase控制台中看到Crashlytics面板

        2
  •  1
  •   Adam    8 年前

    1. 我将实时数据库导出为JSON,并复制了数据库规则。
    2. 我从Firebase项目中删除了我的应用程序。
    3. 我删除了Firebase项目。
    4. gradlew.bat clean
    5. 我做了一个 Ctrl+Shift+F 织物 崩溃 只是为了确保绝对没有对Fabric、Crashlytics或不推荐使用的崩溃报告库(在我的系统中仍然是一个依赖项)的剩余引用构建.gradle我没有意识到这一点,因为Firebase助手工具在我第一次尝试让它工作时添加了这个作为崩溃报告依赖项,然后立即告诉我已弃用:/)。
    6. 我重新创建了我的one-test用户帐户(谢天谢地,这个应用程序还没有投入生产:p)。
    7. 我重新启用了analytics(尽管这仅仅是一个转到analytics选项卡并看到它已经启用的问题,因为我的数据库中仍然存在依赖关系)构建.gradle我的应用程序模块)。
    8. 我转到Crashlytics选项卡,看到了解释如何启用Crashlytics的原始屏幕。不过,这次我没有在Fabric上创建项目,也没有安装Fabric插件,我只是复制了Fabric依赖项,正如@jake所建议的那样,这些可以在这里找到 https://firebase.google.com/docs/crashlytics/get-started?authuser=0 .
    9. https://firebase.google.com/docs/crashlytics/force-a-crash?authuser=0 .
    10. 然后你瞧!该崩溃立即出现在Firebase的Crashlytics选项卡中。没有Fabric项目,没有Fabric插件,只有依赖项。

    这种方法还有一个额外的好处,那就是允许我删除我不想要的额外数据库和用户属性(Firebase目前不允许您在创建它们之后删除它们>:()),但是这种方法对于那些已经在Firebase项目中投入了大量资金并且不能简单地重新开始的人来说显然是不可行的。幸运的是,这对我来说不是太痛苦。

        3
  •  1
  •   jj1    6 年前

    apply plugin: 'com.google.firebase.crashlytics' 应用内模块 和依赖关系{

        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.1.1'
        classpath 'com.google.gms:google-services:4.3.3'
    } in project module 
    
        4
  •  0
  •   dipdipdip    8 年前

    我和你有同样的问题。我能够链接织物后,从Firebase取消链接Crashlytics的Firebase按照指示 this answer . 遗憾的是,这只能通过自己构建一个自定义url来完成。

    推荐文章