programing

DEBUG 빌드에 대해 Fabric의 Firebase 충돌 분석을 사용하지 않도록 설정할 수 없습니다.

mytipbox 2023. 7. 17. 23:01
반응형

DEBUG 빌드에 대해 Fabric의 Firebase 충돌 분석을 사용하지 않도록 설정할 수 없습니다.

Firebase를 통해 Fabric의 Crashlytics를 활용하는 앱이 있습니다.다음은 작성 시 내 응용프로그램에서 처음 실행되는 작업입니다.

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

그럼에도 불구하고 충돌은 다음과 같이 제출됩니다.DEBUG == true모드

다음 버전을 사용합니다.

내 체격으로classpath "io.fabric.tools:gradle:1.25.1"

내 앱/빌드에서implementation "com.crashlytics.sdk.android:crashlytics:2.9.1"

불행히도 추락 사고는 여전히 보고되고 있습니다.내가 뭘 잘못하고 있는 거죠?

스나이더니케코이미 정답을 게시했지만 실제 릴리스 APK를 구축할 때마다 메타데이터 값을 변경하는 것은 다소 지루해 보입니다. 따라서 여기에 소위 매니페스트 플레이스홀더라고 불리는 것을 사용하고 값을 자동으로 변경하는 솔루션이 있습니다.true또는false에 따라buildType.

앱에 다음을 추가합니다.build.gradle

android {

    // ...

    buildTypes {
        debug {
            manifestPlaceholders = [enableCrashReporting:"false"]
        }
        release {
            manifestPlaceholders = [enableCrashReporting:"true"]
        }
    }

}

그리고 이것은 당신에게.AndroidManifest.xml

<manifest ... >

    <application ...>

        // ...

        <meta-data android:name="firebase_crashlytics_collection_enabled" android:value="${enableCrashReporting}" />

    </application>

</manifest>

다음을 클릭하여 현재 값을 확인할 수 있습니다.Merged ManifestAndroidManifest.xml을 열면 탭이 나타납니다.다음과 같은 내용이 표시됩니다.

Merged manifest meta-data value for crash reporting

Firebase Crashlytics 설명서에서는 앱 세션에서 보고를 사용하도록 설정한 후에는 사용하지 않도록 설정할 수 없다고 설명합니다.

기본적으로 충돌 분석 보고는ContentProvider명명된 충돌 분석이전에 실행되는 InitProviderApplication인스턴스가 생성됩니다.충돌 분석InitProvider는 메타데이터 값을 기반으로 보고를 활성화하거나 비활성화합니다.firebase_crashlytics_collection_enabled기본적으로 참입니다.

보고를 비활성화하려면 매니페스트 메타데이터가 존재하고 false로 설정되어야 합니다.

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

앱 초기화 중에 다음 메시지에 대한 로그캣을 확인합니다.

CrashlyticsInitProvider: CrashlyticsInitProvider initialization successful

메시지가 있는 경우firebase_crashlytics_collection_enabled사실입니다.메시지가 없으면 충돌 보고를 사용하지 않도록 메타데이터를 성공적으로 설정했습니다.

메타데이터가 누락되었거나 true로 설정된 경우 다음 호출을 사용하여 코드에서 보고를 비활성화할 수 없습니다.Fabric.with(...).

다른 답변에 대한 설명에서 메타데이터를 사용하여 보고를 비활성화하려고 했지만 실패했음을 나타냅니다.오타가 있는지 확인하고 선언문이 올바른 위치에 있는지 확인합니다.<application>원소의테스트에서는 메타데이터를 사용하여 보고를 비활성화한 다음 런타임에 활성화할 수 있습니다.

드디어 문제를 찾았습니다.충돌 분석은 콘텐츠 공급자에서 초기화되므로 응용 프로그램에서 사용하지 않도록 설정할 때까지onCreate()하지만 이미 너무 늦었어요.디컴파일된 코드를 살펴보니 매니페스트의 <애플리케이션> 요소에 메타데이터를 추가하여 초기화를 해제할 수 있습니다.

그래서 제가 하는 일은...app/src/debug/AndroidManifest.xml에 추가했습니다.

<?xml version="1.0" encoding="utf-8"?><!--suppress ALL -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="<your app package>">

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

</manifest>

또한 다음을 추가하여 앱 모듈 그래들 빌드 파일에서 크래시리틱스를 비활성화했습니다.

    debug {
        ext.enableCrashlytics = false
    }

놀랍게도 나는 할 필요가 없었습니다.Fabric.with(...)그 정도면 충분해요.

정상적으로 작동합니다. 보고서가 없습니다.

파이어베이스 충돌 분석으로 전환하고 패브릭 충돌 분석을 제거했다면 코드에서도 가능하다고 생각합니다: 파이어베이스 문서 링크

따라서 응용 프로그램 클래스의 onCreate에서 다음을 수행합니다.

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG);

Android 설명서에서 이 정보 가져오기 Firebase 충돌 보고서 사용자 지정

옵트인 보고 사용: 기본적으로 Firebase Crashlytics는 모든 앱 사용자에 대한 충돌 보고서를 자동으로 수집합니다.사용자가 전송하는 데이터를 더 잘 제어할 수 있도록 대신 옵트인 보고를 활성화할 수 있습니다.

이를 위해서는 자동 수집을 비활성화하고 옵트인 사용자에 대해서만 Crashlytics를 초기화해야 합니다.

AndroidManifest.xml 파일에서 메타데이터 태그를 사용하여 자동 수집을 해제합니다.

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

앱의 작업 중 하나에서 충돌 분석을 초기화하여 선택한 사용자에 대한 수집을 활성화합니다.

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

사용하지 않도록 설정해야 합니다.Crashlytics앱 빌드의.gradle.디버그 빌드에 대해 충돌 분석 사용 안 함

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

Firebase Crash 보고를 완전히 비활성화하고 추가할 필요가 없는 경우

com.crashlytics.sdk.android:crashlytics:2.9.1

@reverse의 답변을 따르되 AndroidManifest.xml에 이를 추가합니다.

<application ...>

    // ...

    <meta-data 
            android:name="firebase_crashlytics_collection_enabled" 
            android:value="${enableCrashReporting}" />
    <meta-data
            android:name="firebase_analytics_collection_deactivated"
            android:value="true"/>
</application>

언급URL : https://stackoverflow.com/questions/49528780/fabrics-crashlytics-with-firebase-cant-be-disabled-for-debug-builds

반응형