개발 중 Crashlytics를 비활성화하는 방법


245

개발하는 동안 Crashlytics Android SDK를 끄는 간단한 방법이 있습니까?

바보 같은 짓을 할 때마다 충돌을 일으키고 싶지 않습니다.

반면에 나는 Crashlytics.start()주석을 풀고 주석을 풀고 커밋하는 것을 잊어 버릴 위험 이 없습니다.


매니페스트에서 API 키를 제거하려고 했습니까? 크래시인지 기억이 나지 않습니다.
Timmetje

@timmied 충돌합니다. 또한 전체 줄에 주석을 달면 Manifest앱이 충돌하므로 질문이 좀 더 합법적입니다.
Michael

답변:


172

Crashlytics의 마크가 여기 있습니다. 디버그 빌드를 수행하는 동안 Crashlytics를 비활성화하는 몇 가지 방법이 있습니다.

  1. 디버그 및 릴리스 빌드에 다른 android : versionString을 사용한 다음 디버그 버전에 대한 Crashlytics 웹 대시 보드에서 충돌보고를 사용하지 않도록 설정하십시오.

  2. 디버그 플래그를 확인하는 if 문에서 Crashlytics.start ()에 대한 호출을 래핑하십시오. 여기에 제안 된 것과 같은 사용자 정의 플래그 또는 접근 방식을 사용할 수 있습니다. APK가 서명되었는지 또는 "디버그 빌드"인지 확인하는 방법은 무엇입니까?


5
@marcr BuildConfig.DEBUG를 사용하는 것은 어떻습니까?
dannyroa

3
@dannyroa BuildConfig.DEBUG는 모든 빌드 환경에서 작동하는 표준 플래그는 아닙니다. Eclipse & ADT로 빌드 할 때 일관성있게 설정되었지만 다른 곳에서는 그렇지 않다고 생각합니다.
marcr

11
BuildConfig.DEBUGGradle을 사용하여 빌드하는 경우 사용해야합니다. 항상 올바르게 생성됩니다.
Austyn Mahoney

3
@marcr 최신 버전의 crashlytics (Fabric과 병합 된 것처럼 보입니다)에서 라이브러리는 내부 검사를 수행 BuildConfig.DEBUG합니까?
akhy

2
@akhyar 그것은 자동으로 확인되지 않습니다, 나는 사용 : if (! BuildConfig.DEBUG) {Fabric.with (this, new Crashlytics ());}
Björn Kechel

387

Crashlytics에서 솔루션을 찾았습니다 (패브릭 통합 사용).

Application 클래스에 다음 코드를 넣습니다. onCreate()

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

편집하다:

Crashalitics 2.3 이상에서는 더 이상 사용되지 않습니다. 올바른 코드는 다음과 같습니다.

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

또는

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

( Crashlytics 더 이상 사용되지 않는 메소드 disabled () 에서 복사 )


EDIT2 :

선택적으로 이것을 buildTypegradle에 추가 할 수도 있습니다 . 이 명령은 crashlytics 맵핑 파일 전송 및 각 빌드에 대한 ID 생성을 비활성화하여 해당 플레이버의 gradle 빌드 속도를 높입니다. 런타임에 Crashlytics를 비활성화하지는 않습니다. 여기에서 Mike B의 답변을 참조하십시오.

buildTypes {
    release {
           ....
    }
    debug {
        ext.enableCrashlytics = false
    }
}

2
이것은 사용하기 훨씬 좋고 응용 프로그램 클래스 외부의 코드에서 Crashlytics를 호출하면 응용 프로그램 충돌을 중지합니다.
speedynomads 2012 년

1
Crashlytics 2.3.0에서 더 이상 사용되지 않습니다 :(
Damian Walczak

1
ext.enableCrashlytics = false 2.5에서도 작동하지 않습니다. 실제로는 효과가 없었습니다. 직물 전에도.
Bao-Long Nguyen-Trong

2
여기에 우려가 있습니다. 이것이 답변과 베타를 가능하게합니까? 보다 정확한 것 같습니다 : CrashlyticsCore core = new CrashlyticsCore.Builder (). disabled (BuildConfig.DEBUG) .build (); Fabric.with (this, 새로운 답변 (), 새로운 베타 (), 새로운 Crashlytics.Builder (). core (core) .build ());
gbero

1
이것을 올바르게 사용하면 ext.enableCrashlytics = false가 충돌하지 않습니다. 충돌을 극복하는 방법은 Fabrics 설명서 : docs.fabric.io/android/crashlytics/build-tools.html에 있습니다.
Frank

46

선택한 답변이 더 이상 정확하지 않습니다. Google 은 Crashlytics 의 통합변경했습니다 . 내 현재 버전은 내가 Gradle 파일 2.9.1에 추가 implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'하는 것뿐입니다 . 더 이상 필요한 사항은 없지만 Crashlytics가 항상 실행 중임을 의미합니다.

해결책 1

릴리스 버전에서는 Crashlytics 만 컴파일하십시오.

dependencies {
   ...
   releaseImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version
}

해결책 2

Crashlytics추가로 구성 하려는 경우 디버그 빌드에서 Crashlytics 클래스를 찾을 수 없으므로 솔루션 1이 작동하지 않습니다. 따라서 Gradle 구현을 다음으로 다시 변경하십시오.

implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version

그런 다음 매니페스트로 이동하여 meta-data태그 안에 다음 태그를 추가하십시오 application.

<application
        android:name="...>

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

...

</application>

Launch-Activity에 추가 (모든 활동이 아니라 한 번만 필요)

if (!BuildConfig.DEBUG) { // only enable bug tracking in release version
   Fabric.with(this, new Crashlytics());
}

릴리스 버전에서만 Crashlytics를 사용할 수 있습니다. Crashlytics를 구성 할 때 BuildConfig.DEBUG도 확인하십시오 (예 :

if (!BuildConfig.DEBUG) {
   Crashlytics.setUserIdentifier("HASH_ID");
}

2
이것은 깨끗해 보인다. 대신 응용 프로그램 인스턴스에 없을 때 기본 활동에서 초기화하는 대신?
jules

웹 사이트에 나와 Enable collection for selected users by initializing Crashlytics from one of your app's activities있지만 응용 프로그램에서 Crashlytics를 초기화해도 크게 바뀌지 않는 것 같습니다. 해봤 어? 작동하면 대답에 추가 할 수 있습니다. firebase.google.com/docs/crashlytics/customize-crash-reports
폴 Spiesberger

2
런타임에 crashlytics를 비활성화하기 위해 다른 솔루션을 사용할 수 없었습니다. 솔루션 1은 완벽하게 작동했습니다. 왜 그렇게 생각하지 않았습니까?

솔루션 주셔서 감사합니다. firebase_crashlytics_collection_enabled매니페스트에서 false로 설정하면 콘솔에 충돌이 나타나지 않습니다 (v2.9.9 사용). 따라서 디버그 빌드 firebase_crashlytics_collection_enabled=falsetrue릴리스에 대해 별도의 매니페스트를 추가하여이 문제를 해결했습니다.
Vasily Kabunov

30

Gradle을 사용하는 경우 이것을 풍미에 추가하십시오.

ext.enableCrashlytics = false

1
그것은 맛만을위한 것입니까? 디버그 대 릴리스는 어떻습니까? 디버그를 비활성화하려했지만 여전히 크래시를 보냅니다
xialin

나는 그것이 맛에서만 작동한다고 생각합니다. Austyn과 Marcc가 지적한 플래그를 사용하는 IMO가 가장 쉽습니다.
user1998494

해결책을 찾았습니다. 이전 Crashlytics와 호환되는지 확실하지 않습니다. Fabric SDK의 새로운 Crashlytics를위한 것입니다. 내 대답은 아래를 확인
xialin

1
이 명령은 crashlytics 맵핑 파일 전송 및 각 빌드에 대한 ID 생성을 비활성화하여 해당 플레이버의 gradle 빌드 속도를 높입니다. 런타임에 Crashlytics를 비활성화하지는 않습니다. 여기에서 Mike B의 답변을 참조하십시오 : stackoverflow.com/questions/28339323/…
Aphex

18
이로 인해 충돌이 발생했습니다 ... " This app relies on Crashlytics."
Sakiboy

27

최신 문서를 확인하십시오. https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .

ext.enableCrashlytics = falsebuild.grade를 추가하는 것 외에도 ,

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);

이 방법으로 시도했지만 여전히 앱이 충돌합니다This app relies on Crashlytics. Please sign up for access at
Balflear

ext.enableCrashlytics = falsebuild.gradle에서 누락 된 것 같습니다.
Abhishek Patidar

아니요, build.gradle 파일에 디버그 빌드 유형을 추가했으며 buildTypes -> debug, also i'm applying the plugin via 플러그인 적용 중입니다 : 'io.fabric'`
Balflear

이 솔루션이 왜 24 번이나 상향 조정되었는지 잘 모르겠습니다. 충돌This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
TROD

24

이것이 가장 쉬운 해결책이라는 것을 알았습니다 .

    release {
        ...
        buildConfigField 'Boolean', 'enableCrashlytics', 'true'
    }
    debug {
        buildConfigField 'Boolean', 'enableCrashlytics', 'false'
    }

위의 행은 파일 enableCrashlytics에서 호출되는 정적 부울 필드를 작성 BuildConfig하여 시작 여부를 결정하는 데 사용할 수 있습니다 Fabric.

    if (BuildConfig.enableCrashlytics)
        Fabric.with(this, new Crashlytics());

참고 : 이 방법을 사용하면 패브릭은 릴리스 빌드에서만 초기화됩니다 (위 코드에서 표시). 즉, 아래 그림과 같이 Fabric이 초기화되었는지 여부를 확인 Crashlytics하는 if블록에 클래스의 static 메소드를 호출해야 합니다.

if (Fabric.isInitialized())
    Crashlytics.logException(e);

그렇지 않으면 Must Initialize Fabric before using singleton()에뮬레이터에서 테스트 할 때 앱에서 오류 가 발생 합니다.


17

2019 년 답변

릴리스에서 Crashlytics 만 사용하도록 설정하고 디버그에서 2 시간 동안 사용 중지하고 Firebase 콘솔에서 예외가 업로드되었는지 여부를 확인했습니다.

이를 수행 할 수있는 두 가지 방법이 있습니다.

옵션 1

작동하지만 Crashlytics디버그 빌드에서 메소드 를 호출 하면 앱이 중단 됩니다.

app / build.gradle

android {
    buildTypes {
        release {
            manifestPlaceholders = [crashlyticsEnabled: true]
        }
        debug {
            manifestPlaceholders = [crashlyticsEnabled: false]
        }

AndroidManifest.xml

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

옵션 2

대안으로 먼저 Crashlytics확인하지 않고 메소드 를 호출 할 수 있습니다 BuildConfig.DEBUG. 이 설정을 사용하면 다음과 같은 메소드를 안전하게 호출 할 수 있습니다 Crashlytics.logException(). 디버그 빌드에서는 아무 것도 수행하지 않습니다. 디버그로 보고서가 업로드되는 것을 볼 수 없습니다.

app / build.gradle

android {
    buildTypes {
        release {
            ext.enableCrashlytics = true
        }
        release {
            ext.enableCrashlytics = false
        }

AndroidManifest.xml

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

응용 프로그램 onCreate ()

val crashlytics = Crashlytics.Builder()
    .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build()
Fabric.with(this, crashlytics)

android:value="false"로 변경해야 한다고 생각 합니다 android:value="${enableCrashlytics}". 그렇지 않습니까?
JaydeepW

옵션 # 2의 또 다른 장점은 처음에 분석 수집을 비활성화 한 다음 사용자에게 먼저 앱 사용을 추적해도 괜찮다는 것을 요청할 수 있다는 것입니다 (GDPR 생각). 그런 다음 사용자가 추적에 동의 한 경우 Fabric.with 호출 만 수행합니다.
크리스천 헨덴

옵션 # 2의 유일한 단점은 (비활성화되어 있기 때문에) 충돌이 표시되지 않더라도 여전히 Firebase 대시 보드에서 디버그 버전을 생성한다는 것입니다. 이로 인해 두 가지 문제가 발생합니다. 첫째, 릴리스 버전을 찾기가 더 어렵습니다. 두 번째-Firebase 대시 보드에는 최신 100 개 버전 만 표시 되므로 일부 이전 버전에서는 충돌이 발생하지 않을 수 있습니다. 패브릭 대시 보드에서는 특정 버전을 사용 중지 할 수 있지만 Firebase 대시 보드 에서는 불가능합니다 .
Alex Lipov

14

이것을 사용하십시오 MyApplication#onCreate()

if (!BuildConfig.DEBUG) Crashlytics.start(this);

편집 Fabric으로 업그레이드 한 경우이 답변을 대신 사용하십시오 .


BuildConfig.DEBUG가 항상 올바르게 설정되지는 않습니다. Crashlytics를 활성화 / 비활성화하기 위해 IntelliJ를 사용하는 동안 문제가 발생했습니다.
Zeb Barnett

5
어떤 빌드 도구를 사용하고 있습니까? Gradle은 항상 해당 값을 설정합니다. 1 년 전의 문제 였지만 새로운 빌드 도구가 훨씬 좋습니다.
Austyn Mahoney

IntelliJ 용 Gradle 플러그인 v0.9. + 및 Gradle 자체 용 v1.11을 사용하고 있습니다.
Zeb Barnett

내 앱에서 문제가 발생하지 않았습니다. BuildConfigGradle 작업에 의해 생성되며 실행됩니다. 또한 buildConfigField사용자 정의 필드를 설정 하는 데 사용 하며 항상 작동합니다. tools.android.com/recent/androidstudio045released 또한 사용을 제안합니다 BuildConfig.DEBUG.
Austyn Mahoney

이상 주의자로서 나는 내가 일하는 소규모 회사의 자동화되지 않은 자동화 프로세스를 단순화 할 수 있기 때문에 그것을 사용하고 싶다. 그것은 우리가 그 깃발에 의존하는 빌드를 프로덕션에 출시했을 뿐이며 Crashlytics는 그것이 실제로 작동하는 것을 보지 못했습니다. 다시 수동으로 전환 한 후 Crashlytics에서 즉시 확인했습니다.
Zeb Barnett


9

다른 매니페스트 파일이 필요하지 않기 때문에 내가 좋아하는 또 다른 간단한 솔루션 :

1 단계-build.gradle에서 매니페스트 자리 표시 자 정의

android {
    ...
    buildTypes {
        release {
            manifestPlaceholders = [crashlytics:"true"]
        }
        debug {
            manifestPlaceholders = [crashlytics:"false"]
        }
    }
    ...
}

2 단계-AndroidManifest.xml에서 사용

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

6

디버그 빌드에서 성가신 심볼 업로드를 비활성화 할 수도 있습니다.

def crashlyticsUploadStoredDeobsDebug = "crashlyticsUploadStoredDeobsDebug"
def crashlyticsUploadDeobsDebug = "crashlyticsUploadDeobsDebug"
tasks.whenTaskAdded { task ->
    if (crashlyticsUploadStoredDeobsDebug.equals(task.name) ||
            crashlyticsUploadDeobsDebug.equals(task.name)) {

        println "Disabling $task.name."
        task.enabled = false
    }
}

build.gradle응용 프로그램 모듈에 넣으십시오 .


6

디버그 및 릴리스 빌드의 모든 충돌을 캡처하고 Crashlytics 대시 보드에서 충돌을 분리하려는 경우 다음 코드 행을 build.gradle에 추가 할 수 있습니다.

debug {
    versionNameSuffix "-DEBUG"
}

예를 들어 앱의 versionName이 1.0.0 인 경우 릴리스 빌드는 1.0.0으로 태그 지정되고 디버그 빌드는 1.0.0-DEBUG가됩니다.


이거 야? 맛을 할 필요가 없습니까?
portfoliobuilder

6

여기에는 좋은 답변이 많이 있지만 테스트를 위해 충돌 로그가 여전히 매우 유용한 자체 베타 테스트 및 실험실 밖 테스트를 위해 디버그 빌드를 사용하고 여전히보고하고 싶습니다. OP와 마찬가지로 내가 원했던 것은 활발한 개발 중에 종종 충돌을 일으키는 원인이되는 신속하게 해결하는 것입니다.

모든 디버그 충돌을 제거하는 대신 다음 코드를 사용하여 장치가 개발 시스템에 연결되어있는 동안에 만 보고서를 비활성화하도록 선택할 수 있습니다.

if (!Debug.isDebuggerConnected()) {
    Fabric.with(this, new Crashlytics());
}

잘못 됐어 필자는 치명적이지 않은 예외를 사용하여 코드에 기록 Crashlytics.logException(e)하고 Fabric 싱글 톤이 초기화되지 않았기 때문에 디버그 빌드에서 예외가 발생합니다. Crashlytics를 사용하는 경우 항상 Fabric 싱글 톤을 초기화하십시오. fahmy 's answer를 참조하십시오 .
naXa

5

문제는 어떤 솔루션도 최신 crashlytics SDK에 대해 작동하지 않는다는 것입니다. (2.9.0을 사용하고 있습니다)

코드는 프로젝트로 컴파일되어 응용 프로그램을 onCreate 호출하기 전에 실행되므로 코드로 비활성화 할 수 없습니다. 따라서 다른 솔루션은 간단합니다. 필요하지 않은 경우 crashlytics를 컴파일하지 마십시오. build.gradle 파일에서 'compile'호출을 'releaseCompile'로 바꾸십시오.

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

3

Gradle을 사용하여 빌드 할 때 가장 쉬운 최신 버전 :

if (!BuildConfig.DEBUG) {
    Fabric.with(this, new Crashlytics());
}

Crashlytics 용 Fabric의 새로운 내장 구문을 사용하며 Gradle 빌드와 자동으로 작동합니다.


3

내가 겪은 이상한 문제 : 나는 xialin 의 답변 (공식 웹 사이트에도 나타남)을 따랐 는데 작동하지 않았다. BuildConfig디버그 모드에서도 false로 설정된 정적 DEBUG 변수가 포함 된 Fabric 패키지를 참조 하고 있음이 밝혀졌습니다.

따라서 위에서 언급 한 솔루션을 따라도 디버그 보고서가 계속 표시되는 경우이를 참조하고 있는지 확인하십시오.

import com.yourpackagename.BuildConfig;

그리고 이것은 아닙니다.

import io.fabric.sdk.android.BuildConfig;    

2

BuildConfig.DEBUG올바르게 설정되지 않을까 걱정되면 ApplicationInfo대신 다음을 사용하십시오 .

boolean isDebug = ( mAppContext.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) != 0;
Crashlytics crashlytics = new Crashlytics.Builder().disabled( isDebug ).build();
Fabric.with( uIContext, crashlytics );

2

특징을 사용하거나 구성을 빌드하십시오. 개발자 빌드에 별도의 빌드 식별자를 사용하면 모든 충돌이 계속 별도의 앱으로 진행됩니다. 피어와 빌드를 공유하거나 디버거없이 빌드를 사용하는 경우 편리합니다. 이 같은 -

    productFlavors {
    dev {
        applicationId "io.yourapp.developement"
    }
    staging {
        applicationId "io.yourapp.staging"
    }

    production {
        applicationId "io.yourapp.app"
    }

2

디버깅 가능한 릴리스 빌드를 원하는 경우 다음과 같은 방법이 있습니다.

buildTypes {
    release {
        signingConfig signingConfigs.config
        debuggable true //-> debuggable release build
        minifyEnabled true
        multiDexEnabled false
        ext.enableCrashlytics = true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'false'
    }
    debug {
        minifyEnabled false
        multiDexEnabled true
        ext.enableCrashlytics = false
        ext.alwaysUpdateBuildId = false
        // Disable fabric build ID generation for debug builds
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'true'
    }
}

당신은 설정하면 debuggable true당신의 BuildConfig.DEBUG 내가 BuildConfig 클래스에서 그 변수를 추가 그 이유는, 사실로 초기화됩니다.

초기화 패브릭 :

Crashlytics crashlytics = new Crashlytics.Builder()
            // disable crash reporting in debug build types with custom build type variable
            .core(new CrashlyticsCore.Builder().disabled(BuildConfig.BUILD_TYPE_DEBUG).build())
            .build();

    final Fabric fabric = new Fabric.Builder(this)
            .kits(crashlytics)
            //enable debugging with debuggable flag in build type 
            .debuggable(BuildConfig.DEBUG)
            .build();

    // Initialize Fabric with the debug-disabled crashlytics.
    Fabric.with(fabric);

무엇의 목적이다 ext.enableCrashlytics그리고 ext.alwaysUpdateBuildId그들은 어디서든 참조 할 것 같지 않기 때문이다. 뭔가 빠졌습니까?
jules


BuildConfig.BUILD_TYPE_DEBUG는 BuildConfig.DEBUG가 같은 값을 얻기 위해 사용될 수, 중복
안토니스 Radz

@AntonisRadz은 내가 디버깅 릴리스 빌드가 필요하기 때문에
M. 레자 Nasirloo

1

패브릭의 isDebuggable () 메소드를 사용할 수 있습니다.

import static io.fabric.sdk.android.Fabric.isDebuggable;

if(! isDebuggable()){
    // set Crashlytics ... 
}

행복한 코딩 :)


1

디버그 모드에 전용 매니페스트 파일 을 사용할 수 있습니다 (Crashlytics 2.9.7에서 작동합니다).

파일을 작성하고 app/src/debug/AndroidManifest.xml다음을 추가하십시오.

<application>

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

</application>

이 메타 데이터 요소는 일반 AndroidManifest.xml이 아니라 debug / AndroidManifest.xml 에만 넣어야합니다.

사용하는 솔루션이 CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()저에게 효과 가 없었으며 Application.onCreate ()가 호출되거나 활동이 시작되기 전에 CrashlyticsInitProvider가 crashlytics를 초기화한다는 것을 알았습니다. 즉, 응용 프로그램이나 활동에서 패브릭을 수동으로 초기화하는 것은 패브릭이 이미 초기화 되었기 때문에 효과가 있습니다.


1

1 단계 : build.grade에서

buildTypes {
        debug {
            debuggable true
            manifestPlaceholders = [enableCrashlytic:false]
        }
        release {
            debuggable false
            manifestPlaceholders = [enableCrashlytic:true]
        }
    }

2 단계 : 매니페스트

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

3 단계 : 신청 또는 첫 활동

private void setupCrashReport() {
        if (BuildConfig.DEBUG) return;
        Fabric.with(this, new Crashlytics());
    }

3 단계가 필요한지 확실하지 않지만 릴리스 버전이 충돌없이 작동하는지 확인합니다. 출처 : https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting


1

이것은 나를 위해 작동합니다 :

    releaseCompile  'com.crashlytics.sdk.android:crashlytics:2.9.9'

그리고 buildTypes에서 :

debug {
ext.enableCrashlytics = false
}

코드에서 Crashlytics 사용법은 어떻습니까? 컴파일 오류가 발생합니다.
Micer

1

다음 버전 com.google.firebase : firebase-crashlytics : 17.0.0에 대해 Firebase Crashlytics를 사용 중지하는 방법에는 두 가지가 있습니다.

  1. 앱의 매니페스트에 메타 태그 추가

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

또는

  1. 앱에서 직접 구성 (false로 설정하면 다음에 앱을 실행할 때까지 새 값이 적용되지 않음)

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)


0

IDE에서만 수행하려는 경우 다른 방법은 플러그인에서 로그 아웃하는 것입니다. 분명히 다시 로그인하지 않고 빌드를 생성하는 동안 보고서 전송이 중지됩니다.


0
  1. 이것을 앱의 build.gradle에 추가하십시오.

    android {
        buildTypes {
            debug {
              // Disable fabric build ID generation for debug builds
              ext.enableCrashlytics = false
              ...
  2. 런타임시 Crashlytics 키트를 비활성화하십시오. 그렇지 않으면 Crashlytics 키트에서 오류가 발생합니다.

    // Set up Crashlytics, disabled for debug builds
    // Add These lines in your app Application class onCreate method
    
    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);
  3. AndroidManifest.xml에서 추가

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

0

2020 포스트 패브릭 답변

아래 코드를 Application 클래스에 붙여 넣고 setCrashlyticsStateonCreate 애플리케이션 에서 메소드 를 호출하십시오 . debugDevices릴리스 모드에서 빌드 할 때도 개인 장치를 무시할 수 있도록 테스트 장치 ID를 HashSet에 선택적으로 추가 할 수도 있습니다.

노트. 에 의해 반환 된 장치 ID Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);되지 보장 고유 또는 상수로는 (그것은 공장 초기화 또는 수동으로 뿌리 장치에서 변경할 수 있습니다). 그러나 충분해야합니다.

private final HashSet<String> debugDevices = new HashSet<String>(Arrays.asList("6a3d5c2bae3fd32c"));

private boolean isDebugDevice(String deviceId) {
    return debugDevices.contains(deviceId);
}

private void setCrashlyticsState() {
    @SuppressLint("HardwareIds")
    String deviceId = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
    if (BuildConfig.DEBUG || isDebugDevice(deviceId)) {
        Log.v("DeviceId", deviceId);
        FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false);
    }
}

BuildConfig를 확인하십시오. 올바른 BuildConfig 클래스를보고 있습니다. 종종 몇 가지 옵션이 있으며 잘못된 옵션을 끌어 올 수 있습니다.


-8

이것은 어리석은 대답입니다. 나는
의견 Fabric.with(this, new Crashlytics());을 말하고, 작업하고 릴리스 할 때 주석 처리를 제거합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.